Как насчет этой модификации?
Например, когда используется текущий скрипт вашего вопроса, в случае, если MD5(O2:O)
используется в качестве пользовательской функции, input
из function MD5(input) {}
равно 2размерный массив типа [[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)))}))
.
Если это не сработало, я прошу прощения.В то время, чтобы правильно понять вашу ситуацию, можете ли вы предоставить образец электронной таблицы?По этому я хотел бы изменить скрипт.