Google Apps脚本-在数组公式内将单元格转换为SHA256

问题描述

我编写了一个简单的脚本来对单元格进行哈希处理,但是它不适用于数组公式,并且很难确定如何添加功能

function SHA256 (input) {
  var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256,input);
  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;
}

在Google表格中,以上脚本允许我使用SHA526(A2)进行哈希处理

我希望能够通过在数组公式中使用SHA256()对整个列进行哈希处理。 = ArrayFormula(SHA256(A2:A))

我得到的错误

“异常:参数(DigestAlgorithm,number [])与Utilities.computeDigest的方法签名不匹配。(第2行)。”

任何方向将不胜感激!

解决方法

Google Apps Script - Custom Functions Documentation

要使用数组,您需要映射输入。如果可以测试输入是数组还是单个值,请使用简单的else。

function SHA256 (input) {
  if(input.map) {
    return input.map(SHA256);
  } else {
    var rawHash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256,input);
    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;
  }
}