Google表格:将自定义MD5公式与ARRAYFORMULA一起使用

时间:2019-03-08 08:29:16

标签: google-apps-script google-sheets md5 spreadsheet array-formulas

我实现了此处提到的MD5公式:Hash of a cell text in Google Spreadsheet

function MD5 (input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, input);
  Utilities.sleep(100)
  var txtHash = '';
  for (i = 0; i < rawHash.length; i++) {
    var hashVal = rawHash[i];
    if (hashVal < 0) {
      hashVal += 256;
    }
    if (hashVal.toString(16).length == 1) {
      txtHash += '0';
    }
    txtHash += hashVal.toString(16);
  }
  return txtHash;
}

现在,我想使用ARRAYFORMULA来运行它,但是我无法使其正常运行。我尝试过:

=ARRAYFORMULA(({"FiBu MD5";IF(ISBLANK(AG2:AG),"",(MD5(O2:O)))}))

我得到的错误是:

  

“无法将数组转换为(类)[]。(第2行)。”

有人知道如何解决吗?

亲切的问候。

1 个答案:

答案 0 :(得分:0)

此修改如何?

例如,当使用问题的当前脚本时,在将MD5(O2:O)用作自定义函数的情况下,input中的function MD5(input) {}是2维数组,例如{{ 1}}。但是在您的脚本中,通过输入不是数组的值来返回结果。这样,您的问题中显示的错误就会发生。因此,为了输入和输出数组,需要针对这种情况修改脚本,如下所示。

修改后的脚本:

[[value of O2], [value of O3],,,]

注意:

  • 我认为通过上述修改,您也可以使用function MD5(input) { for (var i = input.length - 1; i >= 0; i--) { if (input[i][0]) { input.splice(i + 1); break; } } var result = input.map(function(e) { if (e[0] != "") { var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.MD5, e[0]); // Utilities.sleep(100) // I thought that this might be not required. var txtHash = ''; for (i = 0; i < rawHash.length; i++) { var hashVal = rawHash[i]; if (hashVal < 0) { hashVal += 256; } if (hashVal.toString(16).length == 1) { txtHash += '0'; } txtHash += hashVal.toString(16); } return [txtHash]; } return []; }); return result; } 而不是={"FiBu MD5";MD5(O2:O)}的公式。

如果这不起作用,我深表歉意。那时,为了正确了解您的情况,您可以提供样本电子表格吗?这样,我想修改脚本。