web-dev-qa-db-fra.com

Comment remplacer du texte dans une feuille de calcul Google à l'aide de scripts d'application?

J'ai essayé d'obtenir la valeur d'une plage et de supprimer tous les points de la cellule.

var FILE = SpreadsheetApp.openById("xyz");
var CONTENT = FILE.getSheetByName("Sheet1");
var A1 = CONTENT.getRange("I17").getValue();
A1. replace(".", "");

Cela me donne qui ne peut pas trouver la fonction de remplacement. Existe-t-il une fonction dans Google Apps Script qui me permet de remplacer la chaîne?

12
user2103505

S'il s'agit d'une copie exacte de votre script, vous disposez d'un espace entre A1. Et replace mais je suppose que ce n'est pas le cas.

@SergeInsas a raison, le contenu doit être une chaîne pour que la fonction replace() fonctionne, donc si vous essayez de remplacer . Par un nombre décimal, vous pouvez utiliser la fonction toString() méthode d'abord comme ci-dessous.

var FILE = SpreadsheetApp.openById("xyz");
var CONTENT = FILE.getSheetByName("Sheet1");
var A1 = CONTENT.getRange("I17").getValue();
var A1String = A1.toString().replace(".", "");

Ou vous pouvez multiplier le nombre pour vous débarrasser de la décimale, mais cela dépendra du nombre de décimales que vous avez :)

16
dev

Pour une raison quelconque, cette solution ne fonctionne pas pour moi. Voici tout mon code qui devrait remplacer le symbole "+" par "rien"

  // I need to replace more occurrences of different strings, so this is just an example..
  var ui = SpreadsheetApp.getUi();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var range = ss.getRange("G5:G7").getValues();

  // this is a loop, to go through multiple cells that may contain the text, that needs to be replaced.
    for (var i = 0 ; i<range.length ; i++) {
        var le = range.length;
        var stri = range[i].toString().replace("+", "");
        Logger.log(stri);
  }  

  var msg = ui.alert("Replaced?");
  return msg;
1
Alex T

Partage d'une solution très utile de Bannager Bong sur ce forum d'aide de Google Docs Editor thread. a apporté une légère modification à la fonction afin qu'elle accepte les arguments pour la recherche, remplace les valeurs, puis a ajouté un argument de plage afin que la fonction puisse cibler un Région. Même ainsi, cette méthode est extrêmement lente (mes feuilles ont 5k lignes).

function Cleanup12m() {
  var spreadsheet = SpreadsheetApp.getActive();
  //fandr(",", "");
  //fandr("\"","");
  fandr("�","",spreadsheet.getRange('BA:BA')); //uses specific range
};

function fandr(find, repl) {
  var r=SpreadsheetApp.getActiveSheet().getDataRange();
  var rws=r.getNumRows();
  var cls=r.getNumColumns();
  var i,j,a,find,repl;
  //find="abc";
  //repl="xyz";

  for (i=1;i<=rws;i++) {
    for (j=1;j<=cls;j++) {
      a=r.getCell(i, j).getValue();
      if (r.getCell(i,j).getFormula()) {continue;}
      //if (a==find) { r.getCell(i, j).setValue(repl);}
      try {
        a=a.replace(find,repl);
        r.getCell(i, j).setValue(a);
      }
      catch (err) {continue;}
    }
  }
};

//Revised to apply to a selected range
function fandr(find, repl, range) {
  var r= range;//SpreadsheetApp.getActiveSheet().getDataRange();
  var rws=r.getNumRows();
  var cls=r.getNumColumns();
  var i,j,a,find,repl;
  //find="abc";
  //repl="xyz";

  for (i=1;i<=rws;i++) {
    for (j=1;j<=cls;j++) {
      a=r.getCell(i, j).getValue();
      if (r.getCell(i,j).getFormula()) {continue;}
      //if (a==find) { r.getCell(i, j).setValue(repl);}
      try {
        a=a.replace(find,repl);
        r.getCell(i, j).setValue(a);
      }
      catch (err) {continue;}
    }
  }
};
0
Tommie C.