web-dev-qa-db-fra.com

Détecter si une cellule a un format barré

Existe-t-il une fonction qui vérifie si le format barré a été appliqué au contenu de la cellule? Je voudrais utiliser une formule similaire à (=IF(HAS_STRIKETHROUGH(C5), 1,0)

6
Saul

Cela semble nécessiter une fonction personnalisée, car les formules de feuille de calcul n’ont pas accès au formatage de cellule. J'ai écrit une fonction qui renvoie True lorsque la cellule de référence est barrée et False sinon. Par exemple, vous pouvez entrer =has_strikethrough(B2:C10) et obtenir un tableau de valeurs True/False. (Utiliser des fonctions personnalisées est beaucoup plus efficace que de les appliquer à chaque cellule individuellement.)

Le script doit être placé dans l'éditeur de script, situé dans le menu Outils. Voir cette page pour commencer à utiliser les scripts.

/** 
 * Returns True if the referenced cell has strikethough, False otherwise
 * Supports ranges
 * @param {A1}  reference Cell reference
 * @customfunction
 */
function has_strikethrough(reference) {
  var sheet = SpreadsheetApp.getActiveSheet();
  var formula = SpreadsheetApp.getActiveRange().getFormula();
  var args = formula.match(/=\w+\((.*)\)/i);
  try {
    var range = sheet.getRange(args[1]);
  }
  catch(e) {
    throw new Error(args[1] + ' is not a valid range');
  }
  var lines = range.getFontLines();
  var output = [];
  for (var i = 0; i < lines.length; i++) {
    output.Push(lines[i].map(function(a) {return a == 'line-through';}));
  }
  return output;
}
7
user79865