J'ai une feuille de calcul Google composée de différents mois sur chaque onglet. Chaque mois, j'ajoute un nouvel onglet et encore 50 à 75 lignes. Il y a beaucoup d'onglets. Il y a une cellule sur chaque ligne qui appelle une fonction personnalisée, comme ceci:
=myFunction(A1)
Le problème que j'ai est que je reçois l'erreur suivante:
erreur: le script a été invoqué trop souvent par seconde pour ce compte d'utilisateur Google.
Que puis-je faire pour éviter cette erreur?
Le problème est-il dû au fait qu'il y a trop d'onglets ou de lignes par onglet?
Il doit exister un moyen d’empêcher la fonction de fonctionner plus d’une fois.
Voici une version abrégée de la fonction appelée:
function myFunction(expense) {
if (
InStr(1,expense,"CPC SCP") ||
InStr(1,expense,"CPC/SCP") ||
InStr(1,expense,"xxxx")
)
{ category = "5530 - Postage Expense" }
else if (
InStr(1,expense,"PRE-AUTHORIZED PAYMENT") ||
InStr(1,expense,"xxx ")
)
{ category = "9999 - Payment" }
else if (
InStr(1,expense,"PURCHASE INTEREST") ||
InStr(1,expense,"RETURNED PAYMENT FEE") ||
InStr(1,expense,"xxxx")
)
{ category = "5070 - Bank Charges" }
else { category = "Not Sure" }
return category;
}
Mieux vaut préparer un résultat pour une plage au lieu de traiter avec une cellule individuelle. Lorsque vous ouvrez le fichier, il doit traiter toutes les cellules individuellement. Cela a finalement provoqué l'erreur. J'ai donc créé le code ci-dessous.
function catExp_1(range) {
var output = [], arr = JSON.parse(createArr());
for(var j=0, jLen=range.length; j<jLen; j++) {
var result = "Not Sure";
for(var i=0, iLen=arr.length; i<iLen; i++) {
for(var k=0, kLen=arr[i][1].length; k<kLen; k++) {
if(range[j][0].indexOf(arr[i][1][k]) != -1) {
result = arr[i][0];
}
}
}
output.Push([result]);
}
return output;
}
function createArr() {
// check for availability
var cache = CacheService.getPublicCache();
var cached = cache.get("accounts");
if (cached != null) {
return cached;
}
// create array
var arr = [
[["5070 - Bank Charges"],["PURCHASE INTEREST", "xxxx"]],
[["5530 - Postage Expense"],["CPC SCP","xxxx"]],
[["9999 - xxxxxxx"],["xxxxxxxx"]]
];
// add to cache
var jsonData = JSON.stringify(arr);
cache.put("accounts", jsonData, 21000);
return jsonData;
}
Le premier script créera un tableau de sortie et collectera les données de recherche. Ceci est soit stocké dans le cache, soit préparé à la volée (et stocké dans le cache pour la prochaine fois). L'itération commence par une catégorie Not Sure
. Si une correspondance est trouvée, la valeur correspondante sera Push dans le tableau de sortie. Sinon, le Not Sure
sera ajouté.
=catExp_1(B2:B133)
Vous voudrez peut-être envisager d'ajouter les catégories plutôt que de les rechercher. Cela élimine tout retard du script. Vous pouvez facilement créer un élément de menu qui effectue cela.