web-dev-qa-db-fra.com

Problème de saisie de la durée de Google Sheets

Nous avons utilisé Apple Numbers, ce qui semble avoir une durée un peu meilleure que Google (soit ça, soit il me manque quelque chose). Dans Apple Numbers, si je tape dans une cellule au format "durée": 90m, Il la convertira automatiquement en: 1h 30m,

Dans Google Sheets, lorsque je tape 90m, Il semble convertir l'entrée en "texte" et la déplacer vers la gauche de la cellule. Si je tape: 1h 30m La même chose se produit. Si je tape: 00:90:00, Il le convertit en: 1h 30m, 1:30, Donne également le même résultat. Si vous saisissez 1h 30m, L'affichage exact qu'il est censé montrer ne le reconnaîtra pas comme une durée, mais comme du texte.

Voici un exemple rapide de ce dont je parle: Typed a été formaté comme ="@" Afin qu'il conserve exactement comment je l'ai tapé dans la colonne de droite:

Here is a quick example of what I am talking about: Typed was formatted as ="****" so that it would preserve exactly how I typed it in the right column

Nous entrons donc des centaines de lignes par jour. entrer tout cela au format xx:xx est une énorme douleur dans le cul. Existe-t-il un moyen pour que Google Sheets reconnaisse 90m, Comme 90 minutes, et le mette dans le format dans lequel il est programmé?

2
Jason Krueger

À l'heure actuelle, Google Sheets n'inclut pas de moyen de personnaliser l'attribution automatique du type de données, mais il est possible d'utiliser Google Apps Script pour convertir automatiquement les entrées d'un type à un autre, mais il a certaines limites, mais commençons par la solution la plus simple, puis sur un autre Q & A, nous pourrions parler de la façon de contourner les limitations connues et les problèmes qui se posent pour les cas d'intérêt général.

Il est possible qu'un module complémentaire existe déjà. Si vous avez besoin d'une recommandation, posez une question sur Software Recommendations

Étapes générales

  1. Créer un projet Apps Script
  2. Ajouter une fonction d'édition simple
  3. Ajoutez le JavaScript pour convertir l'entrée sous la forme de #unit aux durées Google
  4. Remplissez la fonction de modification simple pour renvoyer le résultat à la feuille de calcul

Créer un projet de script d'applications

  1. Cliquez sur Outils> Editeur de script
  2. Cliquez sur Projet sans titre ou enregistrez le projet pour attribuer un nom au projet

REMARQUE: si c'est votre premier projet et que vous n'avez pas encore prévu d'en créer plusieurs, le nom pourrait être n'importe quoi, mais un nom descriptif court est toujours préférable

Ajoutez un déclencheur simple lors de l'édition.

  1. Remplacez le code par défaut par
function onEdit(e){

}

Ajoutez le code JavaScript
Complétez la fonction d'édition simple pour retourner le résultat dans la feuille de calcul

Pour plus de commodité, j'ai ajouté le code des deux dernières étapes dans un seul bloc de code.

function onEdit(e) {
  var duration = stringToDuration(e.value);
  if(e.value !== duration) {
    e.range.setValue(duration);
    e.range.setNumberFormat('[h]:mm'); // Here you can set the number format to use
  }
}

/**
 * Converts a string to a Google Sheet duration value
 *
 * @param {String} input The string to be converted
 * @returns An Integer if the input format is supported otherwise returns the input
 */
function stringToDuration(input){
  if(!typeof input === 'string') return input;
  var date = new Date(0);
  var match = input.match(/^(\d.*)(.)/);
  var value = parseFloat(match[1]);
  var isDuration = true;
  switch(input[2]){
    case 'm':
      date.setMinutes(value);
      break;
    case 'h':
      date.setHours(value);
      break;
    default:
      output = input;
      isDuration = false;
  }
  var output;
  if(isDuration) {
    var oneDayInMS = 24*60*60*1000;
    output = date.getTime() / oneDayInMS;
  } else {
    output = input;
  }
  return output
}

[~ # ~] remarques [~ # ~]

  1. Le code ci-dessus considère seulement deux cas, #m (comme 90m) et #h (comme 1,5 h). Pour une solution complète, adaptez le code d'une bibliothèque JavaScript comme moment.js.
  2. Les déclencheurs de script Google Apps fonctionnent sur la base du "meilleur effort", ce qui signifie que les déclencheurs comme lors de la modification, lors de la soumission du formulaire, etc. ne sont parfois pas déclenchés. C'EST À DIRE. si votre type accélère de nombreuses valeurs, certaines modifications déclencheront la fonction onEdit mais d'autres non, vous pouvez donc avoir un déclencheur temporel pour analyser les valeurs qui n'ont pas été converties, puis les convertir.
  3. les fonctions onEdit sur les scripts de projet bornés sont disponibles uniquement pour la feuille de calcul bornée. Pour le rendre disponible à toutes vos feuilles de calcul, créez un module complémentaire, installez-le sur votre compte et activez-le sur la feuille de calcul que vous souhaitez utiliser.
0
Rubén