2014-10-21 7 views

ответ

2

от Cameron Roberts отвечает, что работает практически в каждом случае (если все ячейки заполнены только строками) и просто для удобства ввода (пожалуйста, примите его ответ) здесь один и тот же скрипт с небольшим изменением функции карты: я добавил toString () к аргументу return.

function testReplaceInSheet(){ 
    var sheet = SpreadsheetApp.getActiveSheet() 
    replaceInSheet(sheet,'values','test'); 
} 

function replaceInSheet(sheet, to_replace, replace_with) { 
    //get the current data range values as an array 
    var values = sheet.getDataRange().getValues(); 

    //loop over the rows in the array 
    for(var row in values){ 

    //use Array.map to execute a replace call on each of the cells in the row. 
    var replaced_values = values[row].map(function(original_value){ 
     return original_value.toString().replace(to_replace,replace_with); 
    }); 

    //replace the original row values with the replaced values 
    values[row] = replaced_values; 
    } 

    //write the updated values to the sheet 
    sheet.getDataRange().setValues(values); 
} 
+0

Это сработало! Спасибо. Я думаю, что это лучший способ, потому что мой лист содержит числовые, а не только строки. – Yuri

0

Функция getActiveSheet() возвращает Sheet объект, функции которого описаны по ссылке. Было бы замечательно, если бы такой API был, но в настоящее время вам нужно удалить и вставить (строки, столбцы или содержимое определенного диапазона), чтобы иметь возможность выполнять такую ​​замену.

0

попробовать что-то вроде этого:

var sheet = SpreadsheetApp.getActiveSheet(); 
var cell = sheet.getRange("A1:A1"); 
cell.setValue('ga: sessions','Sessions'); 
4

Вы можете достичь этого путем чтения всех значений в таблице (в виде массива), Looping по массиву, заменяя значения, затем записывая весь массив обратно Лист.

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

Обратите внимание, что любые изменения, сделанные на листе между моментом, когда вы читаете и выписываете данные, будут потеряны и потенциально могут сломать этот пример.

function testReplaceInSheet(){ 
    var sheet = SpreadsheetApp.getActiveSheet() 
    replaceInSheet(sheet,'ga: sessions','Sessions'); 
} 

function replaceInSheet(sheet, to_replace, replace_with) { 
    //get the current data range values as an array 
    var values = sheet.getDataRange().getValues(); 

    //loop over the rows in the array 
    for(var row in values){ 

    //use Array.map to execute a replace call on each of the cells in the row. 
    var replaced_values = values[row].map(function(original_value){ 
     return original_value.replace(to_replace,replace_with); 
    }); 

    //replace the original row values with the replaced values 
    values[row] = replaced_values; 
    } 

    //write the updated values to the sheet 
    sheet.getDataRange().setValues(values); 
} 

Документация:

Array.map: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map

String.Replace: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace

Sheet.getDataRange: https://developers.google.com/apps-script/reference/spreadsheet/sheet#getDataRange()

range.GetValues: https://developers.google.com/apps-script/reference/spreadsheet/range#getValues()

+1

почти идеально ... Я думаю, что вы забыли преобразовать в строку, прежде чем использовать метод замены ... Я выложу рабочую версию –

+1

хороший момент, мой тестовый лист содержал только строковые значения –

+0

Я также ценю вас! – Yuri

0

Это то, что сработало для меня, и это просто.

function changevalues() { 
 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('NameOfSheet'); 
 
    var rangecells = sheet.getRange('DesiredRange'); 
 
    rangecells.setValue('DesiredValue') 
 
}

Смежные вопросы