Traiter avec des cellules vides dans Google Apps Script
Pourquoi ne pas ce travail?
function sendDuesReminder() {
var paid = 3;
var name = 1;
var submitted = 0;
var allowance = 9;
var ms = 86400000; //Number of milliseconds in a day
var today = new Date();
var reminder = 72;
var data = SpreadsheetApp.openById('___').getSheetByName('Master').getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
if (data[i][paid] != 'Yes' &&
data[i][paid] != 'yes' &&
data[i][reminder] == '' &&
((((today.valueOf()) - (data[i][submitted].valueOf()))/ms) > allowance)) {
MailApp.sendEmail("___", "___") ;
SpreadsheetApp.openById('___').getSheetByName('Master').getRange(i+1, reminder).setValue(today);
}
if (data[i][paid] != 'Yes' &&
data[i][paid] != 'yes' &&
data[i][reminder] != null &&
((((today.valueOf()) - (data[i][reminder].valueOf()))/ms) > allowance)) {
MailApp.sendEmail("___", "___") ;
SpreadsheetApp.openById('___').getSheetByName('Master').getRange(i+1, reminder).setValue(today);
}
SpreadsheetApp.flush();
}
Browser.msgBox("OK. Reminder e-mails have been sent. !")
}
Ce que je veux vraiment faire est de dire d'envoyer l'e-mail si la colonne BT est vide OU si la date dans la colonne BT est âgé de plus de 9 jours. Mais je ne sais pas comment inclure une instruction ou dans l'instruction if. Donc, je viens de mettre en place deux instructions if.
Quand j'ai utiliser ", bien que, pour la seconde si l'instruction, j'obtiens un message d'erreur disant qu'il ne peut pas obtenir la valeur de quelque chose d'indéfini.
Lorsque j'utilise null ou undefined, il ne fonctionne pas.
Quelqu'un a des idées?
Vous devez vous connecter pour publier un commentaire.
data[i][reminder] == ''
l'erreur retournée ce qui concerne le premier terme de l'égalité, pas la seconde... donc je suppose que les données n'ont pas 72 index secondaire et c'est de retourner une erreur.(EDIT : pour être plus clair : vous ne pouvez pas obtenir la valeur d'un indéfini élément à l'aide de
.valueOf
et de le diviser par quelque chose, c'est pourquoi vous obtenez "une erreur disant qu'il ne peut pas obtenir la valeur de quelque chose d'indéfini ".)voici un exemple de la façon dont vous pouvez écrire ce peu de temps
data[i][reminder]
est vide, alors la déclarationdata[i][reminder].valueOf()))/ms
ne peut pas travailler car ce n'est pas une date valide de l'objet.Voici donc le code de la boucle j'ai essayé basé sur Serge est très gentil pensée initiale.
J'ai changé l'ordre de l'instruction si, parce que je ne suis pas sûr que j'ai suffisamment articulée en anglais ce que j'essaie de lui faire faire.
Ce que je VEUX dire est que SI ils n'ont pas payé ET 10 jours se sont écoulés depuis qu'ils ont soumis leur formulaire ET le rappel de la cellule est vide ou a une valeur nulle, ALORS envoyer l'e-mail.
(Une fois que je reçois CETTE instruction de travail, je vais aller le dire si 10 jours après nous envoyer le premier e-mail et ils n'ont TOUJOURS pas payé, nous envoyer un autre e-mail. C'est pourquoi je vais à travers toute cette machination mettre une date de rappel plutôt que juste quelque chose comme "envoyé".)
Le code que j'ai les œuvres. SAUF, si vous l'exécutez, envoyer le premier lot d'e-mails, laissez-ajouter la date d'aujourd'hui pour rappel, puis exécutez de nouveau, il envoie les e-mails tous les plus de nouveau.
En bref,
ne semble pas être l'accomplissement de ce qu'est censé faire, qui est de procéder à l'instruction if échouer pour une ligne qui n'a plus RIEN dans le rappel de la colonne. C'est pourquoi j'ai d'abord est venu à ce "comment dois-je traiter avec des cellules vides"? Parce que--pour la vie de moi, je ne comprends pas pourquoi
n'est pas l'épreuve des balles.
Comme je l'ai suggéré dans mon commentaire de Serge réponse, c'est ce qui commence à me rendre fou. J'ai, par conséquent, ne peut pas remercier quelqu'un assez pour les pensées que vous avez. Merci à l'avance!
En réponse à Serge de question que je capture quelques valeurs dans le journal, ici la sortie du journal, après j'ai ajouté sa demande de code de la boucle:
Je n'ai aucune idée de quoi faire, mais je suis sûr que des gens plus intelligents que je vois quelque chose d'intéressant ici?
OK, à la suite de Serge assidus de la difficulté à la prise de vue avec moi, voici le code qui a travaillé pour ce problème. Merci beaucoup, beaucoup à de Serge!
Logger.log('Paid='+data[i][paid].toLowerCase()+' date subm='+data[i][submitted]+'reminder='+data[i][reminder])
exécuter la boucle et de regarder l'enregistreur, si vous pouvez l'afficher dans votre réponse, ce serait super.data[i][reminder])
est toujours 'undefined'? pourriez-vous écrire quelque chose dans cette cellule et exécutez de nouveau pour voir si le script est la cellule de droite ?