使用带有 ARRAYFORMULA 的自定义 MD5 公式
Use custom MD5 formula with ARRAYFORMULA
我实现了此处提到的 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)))}))
我得到的错误是:
"Cannot convert Array to (class)[]. (line 2)."
有人知道如何解决这个问题吗?
这个修改怎么样?
例如,当你的问题的当前脚本被使用时,在MD5(O2:O)
用作自定义函数的情况下,function MD5(input) {}
的input
是二维数组,如[[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)}
代替=ARRAYFORMULA(({"FiBu MD5";IF(ISBLANK(AG2:AG),"",(MD5(O2:O)))}))
的公式。
如果这不起作用,我深表歉意。届时,为了正确了解您的情况,您能否提供一份示例电子表格?据此,我想修改脚本。
我实现了此处提到的 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)))}))
我得到的错误是:
"Cannot convert Array to (class)[]. (line 2)."
有人知道如何解决这个问题吗?
这个修改怎么样?
例如,当你的问题的当前脚本被使用时,在MD5(O2:O)
用作自定义函数的情况下,function MD5(input) {}
的input
是二维数组,如[[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)}
代替=ARRAYFORMULA(({"FiBu MD5";IF(ISBLANK(AG2:AG),"",(MD5(O2:O)))}))
的公式。
如果这不起作用,我深表歉意。届时,为了正确了解您的情况,您能否提供一份示例电子表格?据此,我想修改脚本。