Как заменить текст в Google Spreadsheet с помощью скриптов приложений?

Я попытался получить значение диапазона и удалить все точки из ячейки.

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

Это дает мне то, что не может найти функцию replace. Есть ли функция в Google Apps Script, которая позволяет мне заменить строку?

Ответ 1

Если это точная копия вашего script, тогда у вас есть пробел между A1. и replace, но я предполагаю, что это не так.

@SergeInsas прав, содержимое должно быть строкой для функции replace(), поэтому, если вы попытаетесь заменить . в десятичном значении, вы можете использовать метод toString(), как показано ниже.

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

Или вы можете умножить число, чтобы избавиться от десятичной дроби, но это будет зависеть от того, сколько у вас десятичных знаков:)

Ответ 2

По некоторым причинам, это решение не работает для меня. Вот весь мой код, который должен заменить символ "+" на "ничего"

  // 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;

Ответ 3

Обмен очень полезным решением от Bannager Bong в этой ветке справочного форума редактора Документов Google . Внесены небольшие изменения в функцию, чтобы она принимала аргументы для поиска, заменила значения, а затем добавила аргумент диапазона, чтобы функция могла ориентироваться на конкретную область. Несмотря на это, этот метод очень медленный (мои листы имеют 5 тыс. Строк).

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;}
    }
  }
};

Ответ 4

спасибо за советы, но вы используете очень медленный метод (у меня есть строка 4K и скрипт запускается 10 минут). нет другого способа сделать это быстрее?

я пытаюсь сделать это с помощью getRange и replace, но метод replace() заменяет только первый символ, если у меня 300 или более "," метод replace() заменит только первый "," но я хочу заменить диапазон быстрее, чем getValue() → replace() (для каждой ячейки) → setValue. это займет 10мн... у кого-нибудь есть идея?