diff --git a/src/controllers/luckysheetConfigsetting.js b/src/controllers/luckysheetConfigsetting.js index c20c9c6..3d25d8e 100644 --- a/src/controllers/luckysheetConfigsetting.js +++ b/src/controllers/luckysheetConfigsetting.js @@ -22,12 +22,13 @@ const luckysheetConfigsetting = { enableAddBackTop: true, enablePage: true, pageInfo: null, - - + + editMode: false, beforeCreateDom: null, workbookCreateBefore: null, workbookCreateAfter: null, + remoteFunction: null, fireMousedown: null, plugins:[], forceCalculation:false,//强制刷新公式,公式较多会有性能问题,慎用 @@ -39,4 +40,4 @@ const luckysheetConfigsetting = { defaultCellColor: '#fff', } -export default luckysheetConfigsetting; \ No newline at end of file +export default luckysheetConfigsetting; diff --git a/src/core.js b/src/core.js index 29e5cd9..b6386de 100644 --- a/src/core.js +++ b/src/core.js @@ -122,6 +122,7 @@ luckysheet.create = function (setting) { luckysheetConfigsetting.beforeCreateDom = extendsetting.beforeCreateDom; luckysheetConfigsetting.workbookCreateBefore = extendsetting.workbookCreateBefore; luckysheetConfigsetting.workbookCreateAfter = extendsetting.workbookCreateAfter; + luckysheetConfigsetting.remoteFunction = extendsetting.remoteFunction; luckysheetConfigsetting.fireMousedown = extendsetting.fireMousedown; luckysheetConfigsetting.forceCalculation = extendsetting.forceCalculation; @@ -147,7 +148,7 @@ luckysheet.create = function (setting) { // Store the currently used plugins for monitoring asynchronous loading Store.asyncLoad.push(...luckysheetConfigsetting.plugins); - + // Register plugins initPlugins(extendsetting.plugins , extendsetting.data); diff --git a/src/function/functionImplementation.js b/src/function/functionImplementation.js index 2007878..f7b81f4 100644 --- a/src/function/functionImplementation.js +++ b/src/function/functionImplementation.js @@ -1,3 +1,4 @@ +import luckysheetConfigsetting from '../controllers/luckysheetConfigsetting'; import { luckysheet_getcelldata, luckysheet_parseData, luckysheet_getValue } from './func'; import { inverse } from './matrix_methods'; import { getSheetIndex, getluckysheetfile,getRangetxt } from '../methods/get'; @@ -3336,7 +3337,7 @@ const functionImplementation = { } else{ if (typeof value !== 'string') { - if (new Function("return " + value + criter)()) { + if (new Function("return " + value + criter)()) { matches++; } } @@ -27587,6 +27588,40 @@ const functionImplementation = { return [formula.error.v, err]; } }, + "REMOTE": function() { + if (arguments.length < this.m[0] || arguments.length > this.m[1]) { + return formula.error.na; + } + + try { + const cellRow = window.luckysheetCurrentRow; + const cellColumn = window.luckysheetCurrentColumn; + const cellFunction = window.luckysheetCurrentFunction; + + const remoteFunction = func_methods.getFirstValue(arguments[0]); + if(valueIsError(remoteFunction)){ + return remoteFunction; + } + + luckysheetConfigsetting.remoteFunction(remoteFunction, data => { + const flowData = editor.deepCopyFlowData(Store.flowdata); + formula.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.errorInfo(err); + return [formula.error.v, err]; + } + }, }; export default functionImplementation; diff --git a/src/locale/en.js b/src/locale/en.js index bc370f3..10509d3 100644 --- a/src/locale/en.js +++ b/src/locale/en.js @@ -8827,6 +8827,21 @@ export default { "type": "rangeall" }] }, + { + "n": "REMOTE", + "t": "5", + "d": "Calls a function on a remote server", + "a": "Calls a function on a remote back end server/API.", + "m": [1, 1], + "p": [{ + "name": "remote_expression", + "example": 'SUM(A1:A10000000)', + "detail": "Formula", + "require": "m", + "repeat": "n", + "type": "string" + }] + }, ], toolbar: { undo: 'Undo', @@ -9391,7 +9406,7 @@ export default { byRow: 'By row', byCol: 'By column', generateNewMatrix: 'Generate new matrix', - + }, comment:{ "insert":"Insert", @@ -9449,7 +9464,7 @@ export default { "semicolon":"semicolon", "comma":"comma", "space":"space", - + }, findAndReplace:{ find:"Find", @@ -9509,7 +9524,7 @@ export default { locationTiplessTwoRow:"Please select at least two rows", locationTiplessTwoColumn:"Please select at least two columns", locationTipNotFindCell:"Cell not found" - + }, sheetconfig: { delete: 'Delete', @@ -10032,4 +10047,3 @@ export default { support: 'The current browser does not support WebSocket', } }; - \ No newline at end of file