Как заменить текст в 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мн... у кого-нибудь есть идея?