之前我们给出过跨workbook的公式引用的解决方案,这次在这个解决方案的基础上我们制作了利用自定义函数结合GCExcel实现跨workbook公式的数据验证。这里与之前的差异是需要用普通的自定义函数而非异步函数,因为数据验证这里的设计参考的是Excel,设计上并不支持异步函数。
首先将之前的demo中的异步函数改写成为普通的自定义函数
主要代码:
- var CrossWorkbookFormula = function () {
- };
- CrossWorkbookFormula.prototype = new GC.Spread.CalcEngine.Functions.Function("CROSSWORKBOOK", 4, 4,
- {
- description: "跨表格取数公式",
- parameters: [{
- name: "repaortName",
- repeatable: false,
- optional: false
- },
- {
- name: "reportMonth",
- repeatable: false,
- optional: false
- },
- {
- name: "sheetName",
- repeatable: false,
- optional: false
- },
- {
- name: "range",
- repeatable: false,
- optional: false
- }]
- });
- CrossWorkbookFormula.prototype.evaluate = function (repaortName, reportMonth, sheetName, range) {
- var formData = {
- repaortName: repaortName,
- reportMonth: reportMonth,
- sheetName: sheetName,
- range: range
- }
- var result;
- $.ajaxSettings.async = false;
- $.post("spread/getReportRange", formData, function (data) {
- if (data != undefined && data != null) {
- //context.setAsyncResult(data);
- result = data;
- }
- else{
- //context.setAsyncResult("Error");
- result = "error";
- }
- })
- $.ajaxSettings.async = true;
- return result;
- };
- GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("CROSSWORKBOOK", new CrossWorkbookFormula());
复制代码 之后在页面上设置公式类型的数据验证并使用该自定义公式
主要代码:
- var dv = GC.Spread.Sheets.DataValidation.createFormulaValidator('IF(A1>=CROSSWORKBOOK("费用预算表","六月","Sheet1","A1"),TRUE,FALSE)');
- dv.showInputMessage(true);
- dv.inputMessage('IF(A1>=CROSSWORKBOOK("费用预算表","六月","Sheet1","A1"),TRUE,FALSE)');
- dv.inputTitle("Tip");
- sheet.setDataValidator(0, 0, 1, 1,dv,GC.Spread.Sheets.SheetArea.viewport);
- spread.options.highlightInvalidData = true;
复制代码 在A1单元格输入的时候我们可以看到数据验证的提示
之后输入数值之后可以看到进入了自定义单元格的计算方法,并发送请求至后端,后端通过GCExcel到对应单元格的对应位置去取数据并返回,数据为1000
结果如图所示:
2小于1000所以有错误红圈提示
1001大于1000,所以正确没有红圈提示
|
|