问题描述
我编写了一个简单的脚本来对单元格进行哈希处理,但是它不适用于数组公式,并且很难确定如何添加该功能。
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;
}
}