Je suis totalement perdu ici! p>
Ma feuille de calcul a une feuille "Enregistrement principal du produit" avec une table contenant trois colonnes: ID de produit (numérique) | Description du produit | État du produit. P>
Chaque produit a sa propre feuille dans la feuille de calcul. Le nom de chaque feuille dépend de l'état du produit: P>
- Produit "inactif": strong> Nom de la feuille = ID de produit -> La feuille est cachée p>
Donc, j'essaie d'écrire une macro qui masquez / montre des feuilles en fonction de la condition: p>
Je n'ai pas besoin d'écrire les deux conditions; seulement le plus facile à coder. p>
Des idées ??
Merci! P>
3 Réponses :
Ici ici l'échantillon de votre but, PRODMASTER, la rangée 1 en-tête [PRODID, DESC, STATUS] et les lignes ultérieures sont des données et l'état sera inactif et actif:
function HideSheets() { var spreadsheet = SpreadsheetApp.getActive(); var sheet = spreadsheet.getSheetByName('ProdMaster'); var lrow = sheet.getLastRow(); var myValue = sheet.getRange("A2:C" + lrow).getValues(); for (a=1; a<myValue.length+1; a++) { var target = myValue[a-1]; var tsheet = spreadsheet.getSheetByName(target[0]); if(tsheet==null) spreadsheet.insertSheet(target[0]); if(target[2]=='Active') tsheet.showSheet(); if(target[2]=='Inactive') tsheet.hideSheet(); } };
comme moyen de résoudre votre problème, vous pouvez effectuer ce qui suit, au lieu d'utiliser "actif" ou "inactif" en tant que vérificateurs de validation d'une condition booléenne, dans votre "record principal de produit", vous pouvez définir l'état à l'aide des fonctions true et false , de cette façon, vous pouvez découpler du texte codé sur le texte de votre code et éviter les problèmes de quelqu'un qui a mal orthographié les mots" actifs ". ou "inactif".
function HideSheets() { // Get the active sheet and range of rows you want var spreadSheet = SpreadsheetApp.getActive(); var mainSheet = spreadSheet.getSheetByName('Product Master Record'); var rows = mainSheet.getRange("A2:C" + mainSheet.getLastRow()).getValues(); // Iterate over all rows for(row in rows){ // Get the sheets from their names and check if not null var secondarySheet = spreadSheet.getSheetByName(rows[row][0]); if(secondarySheet){ if(rows[row][2]) secondarySheet.showSheet(); // show the sheet if value is true if(!rows[row][2]) secondarySheet.hideSheet(); // hide sheet if value is false } } };
Feuille de classe P> li> ul> p>
merci à tous!
Enfin j'ai trouvé de l'aide avec un collègue et ça marche. Ceci est le code au cas où quelqu'un trouve utile: p>
Bienvenue sur Stackoverflow. Souhaitez-vous résumer la recherche que vous avez déjà fait - nous ne voudrions pas doubler.
Voulez-vous dire que vous souhaitez distribuer chaque donnée dans l'enregistrement maître de produit à chaque feuille en fonction de l'ID de produit et la visibilité dépend de l'état du produit? S'il vous plaît un script simple comme votre atterrissage, afin que nous puissions comprendre votre flux
Mais pour une idée, vous prenez des enregistrements avec ID et statut, vous cochez l'identifiant, car il ne s'agit pas de texte vide, vous créez une nouvelle feuille simplement si la même feuille n'existe pas, renommez-la avec ID, puis vérifiez l'état, si inactif. il caché et répétez-le jusqu'à la dernière fiche