Adapter un script à google sheets

un module qui permettrait de transcrire un montant en toutes lettres

a marqué ce sujet comme résolu.
Auteur du sujet

Bonjour, je cherchais un moyen d’automatiser le processus de transformation de chiffres en toutes lettres dans google spreadsheet et je suis tombée sur un javascript… Malheureusement pour moi je ne m’y connais pas en javascript. Je voudrais savoir si le code dessous est utilisable en tant que macro de google et comment l’utiliser sans passer par la publication sur Google Apps Market… Merci par avance de votre aide.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">

<title>Nouvelle page 1</title>

<script type="text/javascript">

var res, plus, diz, s, un, mil, mil2, ent, deci, centi, pl, pl2, conj;

var t=["","Un","Deux","Trois","Quatre","Cinq","Six","Sept","Huit","Neuf"];
var t2=["Dix","Onze","Douze","Treize","Quatorze","Quinze","Seize","Dix-sept","Dix-huit","Dix-neuf"];
var t3=["","","Vingt","Trente","Quarante","Cinquante","Soixante","Soixante","Quatre-vingt","Quatre-vingt"];



window.onload=calcule

function calcule(){
    document.getElementById("t").onkeyup=function(){
        document.getElementById("lettres").firstChild.data=trans(this.value)
    }
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des deux parties du nombre;
function decint(n){

    switch(n.length){
        case 1 : return dix(n);
        case 2 : return dix(n);
        case 3 : return cent(n.charAt(0)) + " " + decint(n.substring(1));
        default: mil=n.substring(0,n.length-3);
            if(mil.length<4){
                un= (mil==1) ? "" : decint(mil);
                return un + mille(mil)+ " " + decint(n.substring(mil.length));
            }
            else{   
                mil2=mil.substring(0,mil.length-3);
                return decint(mil2) + million(mil2) + " " + decint(n.substring(mil2.length));
            }
    }
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des nombres entre 0 et 99, pour chaque tranche de 3 chiffres;
function dix(n){
    if(n<10){
        return t[parseInt(n)]
    }
    else if(n>9 && n<20){
        return t2[n.charAt(1)]
    }
    else {
        plus= n.charAt(1)==0 && n.charAt(0)!=7 && n.charAt(0)!=9 ? "" : (n.charAt(1)==1 && n.charAt(0)<8) ? " et " : "-";
        diz= n.charAt(0)==7 || n.charAt(0)==9 ? t2[n.charAt(1)] : t[n.charAt(1)];
        s= n==80 ? "s" : "";

        return t3[n.charAt(0)] + s + plus + diz;
    }
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des mots "cent", "mille" et "million"
function cent(n){
return n>1 ? t[n]+ " Cent" : (n==1) ? " Cent" : "";
}

function mille(n){
return n>=1 ? " Mille" : "";
}

function million(n){
return n>=1 ? " Millions" : " Million";
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// conversion du nombre
function trans(n){

    // vérification de la valeur saisie
    if(!/^\d+[.,]?\d*$/.test(n)){
        return "L'expression entrée n'est pas un nombre."
    }

    // séparation entier + décimales
    n=n.replace(/(^0+)|(\.0+$)/g,"");
    n=n.replace(/([.,]\d{2})\d+/,"$1");
    n1=n.replace(/[,.]\d*/,"");
    n2= n1!=n ? n.replace(/\d*[,.]/,"") : false;

    // variables de mise en forme
    ent= !n1 ? "" : decint(n1);
    deci= !n2 ? "" : decint(n2);
    if(!n1 && !n2){
        return  "Entrez une valeur non nulle!"
    }
    conj= !n2 || !n1 ? "" : "  et ";
    euro= !n1 ? "" : !/[23456789]00$/.test(n1) ? " Euro" : "s Euro";
    centi= !n2 ? "" : " centime";
    pl=  n1>1 ? "s" : "";
    pl2= n2>1 ? "s" : "";

    // expression complète en toutes lettres
    return (" " + ent + euro + pl + conj + deci + centi + pl2).replace(/\s+/g," ").replace("cent s E","cents E") ;

}

</script>


</head>

<body>
<input type='texte' id='t' />
<div id='lettres' style='font-family:verdana; font-size:11px;'>&nbsp</div>
</body>
</html>
+0 -0

Bonjour,

Javascript est un langage vraiment utile, il peut-être bon d’étudier un peu le langage.

Sinon, ça semble faisable d’utiliser directement la partie Javascript du code que tu nous as montré. Grâce à l’API Spreadsheet de Google App.

Alors comme ça, ça semble inutilisable mais Google a fait un guide pour utiliser ses produits. C’est en anglais par-contre.

Bonne chance !

ache.one                 🦹         👾                                🦊

+1 -0
Auteur du sujet

Bonjour ache. Merci de ta réponse. Oui, je voudrais bien y consacrer un peu de temps au javascript… quand mon boulot principal m’en aura laissé un peu de temps…

Concernant mon problème avec ce code, j’ai l’impression qu’il n’est pas reconnu par le document que j’utilise en mode "test…" Je pourrais essayer de le publier (pour que Google le valide) mais comme ce n’est pas un code à moi, je ne sais pas si j’ai le droit…

Sinon, j’ai essayé de l’enregistrer comme ci-dessous, mais peut-être il me manque des bouts de code…

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
function Numtolet() {

var res, plus, diz, s, un, mil, mil2, ent, deci, centi, pl, pl2, conj;

var t=["","Un","Deux","Trois","Quatre","Cinq","Six","Sept","Huit","Neuf"];
var t2=["Dix","Onze","Douze","Treize","Quatorze","Quinze","Seize","Dix-sept","Dix-huit","Dix-neuf"];
var t3=["","","Vingt","Trente","Quarante","Cinquante","Soixante","Soixante","Quatre-vingt","Quatre-vingt"];

function calcule(){
    document.getElementById("t").onchange=function(){
        document.getElementById("lettres").firstChild.data=trans(this.value)
    }
}

function decint(n){

    switch(n.length){
        case 1 : return dix(n);
        case 2 : return dix(n);
        case 3 : return cent(n.charAt(0)) + " " + decint(n.substring(1));
        default: mil=n.substring(0,n.length-3);
            if(mil.length<4){
                un= (mil==1) ? "" : decint(mil);
                return un + mille(mil)+ " " + decint(n.substring(mil.length));
            }
            else{    
                mil2=mil.substring(0,mil.length-3);
                return decint(mil2) + million(mil2) + " " + decint(n.substring(mil2.length));
            }
    }
}



///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des nombres entre 0 et 99, pour chaque tranche de 3 chiffres;
function dix(n){
    if(n<10){
        return t[parseInt(n)]
    }
    else if(n>9 && n<20){
        return t2[n.charAt(1)]
    }
    else {
        plus= n.charAt(1)==0 && n.charAt(0)!=7 && n.charAt(0)!=9 ? "" : (n.charAt(1)==1 && n.charAt(0)<8) ? " et " : "-";
        diz= n.charAt(0)==7 || n.charAt(0)==9 ? t2[n.charAt(1)] : t[n.charAt(1)];
        s= n==80 ? "s" : "";

        return t3[n.charAt(0)] + s + plus + diz;
    }
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// traitement des mots "cent", "mille" et "million"
function cent(n){
return n>1 ? t[n]+ " cent" : (n==1) ? " cent" : "";
}

function mille(n){
return n>=1 ? " mille" : "";
}

function million(n){
return n>=1 ? " millions" : " million";
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// conversion du nombre
function trans(n){

    // vérification de la valeur saisie
    if(!/^\d+[.,]?\d*$/.test(n)){
        return "L'expression entrée n'est pas un nombre."
    }

    // séparation entier + décimales
    n=n.replace(/(^0+)|(\.0+$)/g,"");
    n=n.replace(/([.,]\d{2})\d+/,"$1");
    n1=n.replace(/[,.]\d*/,"");
    n2= n1!=n ? n.replace(/\d*[,.]/,"") : false;

    // variables de mise en forme
    ent= !n1 ? "" : decint(n1);
    deci= !n2 ? "" : decint(n2);
    if(!n1 && !n2){
        return  "Zéro Euros. (Mais, de préférence, entrez une valeur non nulle!)"
    }
    conj= !n2 || !n1 ? "" : "  et ";
    euro= !n1 ? "" : !/[23456789]00$/.test(n1) ? " Euro" : "s Euro";
    centi= !n2 ? "" : " centime";
    pl=  n1>1 ? "s" : "";
    pl2= n2>1 ? "s" : "";

    // expression complète en toutes lettres
    return (ent + euro + pl + conj + deci + centi + pl2).replace(/\s+/g," ").replace("cent s E","cents E");

} 
}
+0 -0

Bonjour :)

En effet il te manque un bout de code, notamment la partie qui dit "lance le code" :P .

1
window.onload=calcule

Qui, en JS, signifie : "Quand la fenêtre se charge, exécute le code de calcul".

Il y a peut-être aussi interférence, car tu as mis tout ton script dans une fonction Numtolet, ce qui n’est pas nécessaire, et qui va faire que le code window.onload=calcule ne s’exécutera pas.

PS : je précise que j’y connais pas grand chose en JS… Je suis curieux de savoir si window.onload=Numtolet marcherait par exemple…

Édité par Gwend@l

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte