2017-07-01 3 views
0

Vous cherchez quelqu'un pour vous aider à dépanner mon script. J'essaie d'écrire un script qui demande une entrée à l'utilisateur, itère à travers un jeu de données recherchant l'entrée et mettra en surbrillance toutes les cellules dans la ligne correspondante rouge.Itérer dans un tableau et mettre en surbrillance la ligne où se trouvent les données [Script Google Sheet]

J'apprécie c'est une demande assez basique mais ayant passé en revue Stackoverflow/le web plus large pendant plusieurs heures et mettant en application des solutions aux différents problèmes en vain, quelqu'un peut m'aider s'il vous plaît à fixer mon code.

exemple:

Compte tenu de cet exemple de données. Si l'entrée utilisateur "C" puis toutes les cellules dans la rangée 3 (C, 5, 8) sera mis en évidence en rouge

  1. A 3 6
  2. B 5 8
  3. C 5 8
  4. D 8 0

Nous voulons que l'utilisateur saisisse "C" et que toutes les cellules actives correspondantes pour la ligne 3 aient leur arrière-plan changé en rouge.

Toute aide est très appréciée.

function HighlightMyTablet() { 
 
    // Scan data in sheet. 
 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 
    var row = ss.getActiveRange().getRowIndex(); 
 
    var range = ss.getDataRange(); 
 
    var values = range.getValues(); 
 
    
 
    // Prompt user for input. 
 
    var ui = SpreadsheetApp.getUi(); 
 
    var response = ui.prompt('What\'s the tablet of the month?', ui.ButtonSet.OK_CANCEL); 
 
    
 
    // Iterate through rows. If data matches input then highlight yellow. 
 
    if (response.getSelectedButton() == ui.Button.OK) { 
 
    for (i=0; i<values.length; i++) { 
 
     if(values[i][0] == response) { 
 
     values[i][0].setBackground("red"); 
 
     } 
 
    } 
 
    } 
 
}

+0

d'abord prendre note que si l'utilisateur inputes un caractère minuscule, il ne sera pas correspondre à quelque chose à savoir si la réponse holdes variables un caractère minuscule « c » 'la déclaration if' échouera –

+0

@VictoryOsikwemhe Nous vous remercions de le compte rendu. Je vais incorporer une fonction de match à la place. – 72usty

Répondre

0

Je suis d'accord avec ce qu'a dit le commentateur, vous devez vous assurer que vous voulez réellement === et non une déclaration .match(new RegExp(user_input, 'i')) qui serait mieux. Mais à part cela, vos erreurs sont: Vous devez obtenir la chaîne de la réponse. Vous obtenez l'objet de réponse. Cela est fait comme ceci: response.getResponseText(). Deuxièmement, vous devez définir la couleur d'une plage, pas celle des données elles-mêmes. Vous pouvez voir comment j'ai mis à jour ces deux choses ci-dessous.

function HighlightMyTablet() { 
    // Scan data in sheet. 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var row = ss.getActiveRange().getRowIndex(); 
    var range = ss.getDataRange(); 
    var values = range.getValues(); 

    // Prompt user for input. 
    var ui = SpreadsheetApp.getUi(); 
    var response = ui.prompt('What\'s the tablet of the month?', ui.ButtonSet.OK_CANCEL); 

    // Iterate through rows. If data matches input then highlight yellow. 
    if (response.getSelectedButton() == ui.Button.OK) { 
    for (i=0; i<values.length; i++) { 
     if(values[i][0] == response.getResponseText()) { 
     ss.getRange('A'+ (i+1)).setBackground('red'); 
     } 
    } 
    } 
} 
+0

Incroyable! Je n'aurais pas pensé à demander le texte de la réponse. Juste une chose supplémentaire, comment pourrais-je obtenir le script pour mettre en évidence toute la ligne correspondant à la saisie des utilisateurs? Plutôt que juste la cellule unique? – 72usty

+0

ss.getRange ('A' + (i + 1) + ": Z" + (i + 1)). SetBackground ('red'); Quelque chose comme ça .. Cela mettra en évidence les 26 premières lignes, ZZ les 52 premiers etc Vous devriez être capable de faire getRange (R, C, numR, numCol) ainsi, mais je continue à obtenir une erreur lorsque j'essaie. Pas certain de pourquoi. – aduss

+0

Fonctionne comme un charme! – 72usty