找回密码
 立即注册

QQ登录

只需一步,快速开始

岁月记忆

注册会员

1

主题

5

帖子

16

积分

注册会员

积分
16
  • 22

    金币

  • 1

    主题

  • 5

    帖子

最新发帖
岁月记忆
注册会员   /  发表于:2024-10-11 10:55  /   查看:335  /  回复:8
20金币
本帖最后由 岁月记忆 于 2024-10-12 10:36 编辑

  AND(Q27>=7,Q27<=17)   函数的计算结果错误,原因是 Q27 为 字符串。

本人的解决方案是 自定义一个 AND 函数,但目前取不到 Q27 的值,只会得到  Q27>=7 的结果

并且 不管 Q27 大于等于或小于等于 什么值(例如为 Q27=19.0  大于等于 100 ,小于等于 10),第一个参数拿到的值始终为 true,第二个参数拿到的值始终为 false
也获取不到具体的行列数

最佳答案

查看完整内容

您好,请参考以下代码来实现自定义函数自行比较的逻辑: function performOperation(a, b, operator) { switch (operator) { case "=": return a >= b; case "==": return a === b; case "!=": return a !== b; default: return false; } } function MyCustomFunction() { this.name = "COMPARE"; this.maxArgs = 3; this.minArgs = 3; } MyCustomFuncti ...

8 个回复

正序浏览
岁月记忆
注册会员   /  发表于:2024-10-12 10:36:05
8#
岁月记忆 发表于 2024-10-12 10:33
你好,可能是我描述有问题,公式“=AND(Q27>=7,Q27

得到的参数已经是 计算后的结果。我想要的是通过自定义函数 自己获取 Q27 与 >=7 ,手动计算结果,并且最好不改变 公式(=AND(Q27>=7,Q27<=17))
回复 使用道具 举报
岁月记忆
注册会员   /  发表于:2024-10-12 10:33:42
7#
Wilson.Zhang 发表于 2024-10-11 16:21
可以参考4楼版主提供的方案,不需要传入单元格索引,evaluate的参数是调用计算公式时传入的参数。举个例 ...

你好,可能是我描述有问题,公式“=AND(Q27>=7,Q27<=17)”,我得到的参数 第一个始终为 true,第二个始终为 false ,不管  Q27 大于等于或小于等于 什么值
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-11 16:21:32
6#
岁月记忆 发表于 2024-10-11 14:08
感谢您的回复!后一个解决方案暂时不考虑,不能修改原来单元格的计算公式,如果修改的话工作量就有点大, ...

可以参考4楼版主提供的方案,不需要传入单元格索引,evaluate的参数是调用计算公式时传入的参数。举个例子,为单元格设置了公式“=SUM(1,2,3,4)”,那么,参数就是1、2、3、4。
回复 使用道具 举报
岁月记忆
注册会员   /  发表于:2024-10-11 14:27:12
5#
Joestar.Xu 发表于 2024-10-11 14:16
您好,请参考:https://demo.grapecity.com.cn/spreadjs/help/docs/faqs/formula/custom-function/get-curr ...

但是传入具体的单元格行列索引不现实,这个公式里的值不是固定的,还有其他获取值的方法了吗?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-11 14:16:55
4#
回复 使用道具 举报
岁月记忆
注册会员   /  发表于:2024-10-11 14:08:46
3#
Wilson.Zhang 发表于 2024-10-11 13:55
您好!如果要获取Q27单元格的值,可以通过Worksheet:getValue()获取,传入Q27单元格的行列索引即可。

通 ...

感谢您的回复!后一个解决方案暂时不考虑,不能修改原来单元格的计算公式,如果修改的话工作量就有点大,前面方案中的 Worksheet 在自定义函数中 怎么得到?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-10-11 13:55:57
2#
您好!如果要获取Q27单元格的值,可以通过Worksheet:getValue()获取,传入Q27单元格的行列索引即可。

通过您的描述,理解可以通过ISNUMBER公式判断Q27的值是否为字符串,再通过INT公式将字符串转为数值,即可判断。这样的话,便可以不用自定义AND函数,使用原生支持的AND公式即可。您可以测验下再评估如何实现。
回复 使用道具 举报
最佳答案
最佳答案
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-10-11 10:55:17
来自 9#
您好,请参考以下代码来实现自定义函数自行比较的逻辑:

function performOperation(a, b, operator) {
  switch (operator) {
    case "<":
      return a < b;
    case "<=":
      return a <= b;
    case ">":
      return a > b;
    case ">=":
      return a >= b;
    case "==":
      return a === b;
    case "!=":
      return a !== b;
    default:
      return false;
  }
}

function MyCustomFunction() {
  this.name = "COMPARE";
  this.maxArgs = 3;
  this.minArgs = 3;
}
MyCustomFunction.prototype = new GC.Spread.CalcEngine.Functions.Function();
MyCustomFunction.prototype.isContextSensitive = function () {
  return true;
};
MyCustomFunction.prototype.evaluate = function (arg, address, number, op) {
  let sheet = arg.source.getSheet();
  let value = sheet.getRange(address).value();

  return performOperation(value, number, op);
};
var customFunction = new MyCustomFunction();
sheet.addCustomFunction(customFunction);

sheet.setValue(0, 0, 321);
sheet.setFormula(0, 1, 'COMPARE("A1", 132, ">=")');
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部