找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15535

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2020-10-8 22:03  /   查看:2629  /  回复:0
之前我们给出过跨workbook的公式引用的解决方案,这次在这个解决方案的基础上我们制作了利用自定义函数结合GCExcel实现跨workbook公式的数据验证。这里与之前的差异是需要用普通的自定义函数而非异步函数,因为数据验证这里的设计参考的是Excel,设计上并不支持异步函数。
首先将之前的demo中的异步函数改写成为普通的自定义函数
主要代码:
  1. var CrossWorkbookFormula = function () {
  2. };
  3. CrossWorkbookFormula.prototype = new GC.Spread.CalcEngine.Functions.Function("CROSSWORKBOOK", 4, 4,
  4. {
  5. description: "跨表格取数公式",
  6. parameters: [{
  7. name: "repaortName",
  8. repeatable: false,
  9. optional: false
  10. },
  11. {
  12. name: "reportMonth",
  13. repeatable: false,
  14. optional: false
  15. },
  16. {
  17. name: "sheetName",
  18. repeatable: false,
  19. optional: false
  20. },
  21. {
  22. name: "range",
  23. repeatable: false,
  24. optional: false
  25. }]
  26. });
  27. CrossWorkbookFormula.prototype.evaluate = function (repaortName, reportMonth, sheetName, range) {

  28. var formData = {
  29. repaortName: repaortName,
  30. reportMonth: reportMonth,
  31. sheetName: sheetName,
  32. range: range
  33. }
  34. var result;
  35. $.ajaxSettings.async = false;
  36. $.post("spread/getReportRange", formData, function (data) {
  37. if (data != undefined && data != null) {
  38. //context.setAsyncResult(data);
  39. result = data;
  40. }
  41. else{
  42. //context.setAsyncResult("Error");
  43. result = "error";
  44. }
  45. })
  46. $.ajaxSettings.async = true;
  47. return result;



  48. };
  49. GC.Spread.CalcEngine.Functions.defineGlobalCustomFunction("CROSSWORKBOOK", new CrossWorkbookFormula());
复制代码
之后在页面上设置公式类型的数据验证并使用该自定义公式
主要代码:
  1. var dv = GC.Spread.Sheets.DataValidation.createFormulaValidator('IF(A1>=CROSSWORKBOOK("费用预算表","六月","Sheet1","A1"),TRUE,FALSE)');
  2. dv.showInputMessage(true);
  3. dv.inputMessage('IF(A1>=CROSSWORKBOOK("费用预算表","六月","Sheet1","A1"),TRUE,FALSE)');
  4. dv.inputTitle("Tip");
  5. sheet.setDataValidator(0, 0, 1, 1,dv,GC.Spread.Sheets.SheetArea.viewport);
  6. spread.options.highlightInvalidData = true;
复制代码
在A1单元格输入的时候我们可以看到数据验证的提示

image.png474515685.png
之后输入数值之后可以看到进入了自定义单元格的计算方法,并发送请求至后端,后端通过GCExcel到对应单元格的对应位置去取数据并返回,数据为1000
image.png489772948.png

结果如图所示:


2小于1000所以有错误红圈提示
image.png426870726.png
1001大于1000,所以正确没有红圈提示
image.png902413940.png

CrossWorkbookDemo.zip

3.2 MB, 下载次数: 17

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部