Javascript 如何用Google Apps脚本替换电子表格中的文本?

Javascript 如何用Google Apps脚本替换电子表格中的文本?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我想在电子表格中找到一个指定的文本,并用其他单词替换它。我试过了 sheet = SpreadsheetApp.getActiveSheet() sheet.replaceText ('ga: sessions','Sessions'); 然后它说“在对象表中找不到函数replaceText。”getActiveSheet()函数返回一个对象,其函数记录在链接中。如果有这样一个API,那就太棒了,但目前您需要删除和插入(行、列或特定范围的内容),以便能够进行这种替换。尝试以下操作: var s

我想在电子表格中找到一个指定的文本,并用其他单词替换它。我试过了

sheet = SpreadsheetApp.getActiveSheet()
sheet.replaceText ('ga: sessions','Sessions');

然后它说
“在对象表中找不到函数replaceText。”

getActiveSheet()函数返回一个对象,其函数记录在链接中。如果有这样一个API,那就太棒了,但目前您需要删除和插入(行、列或特定范围的内容),以便能够进行这种替换。

尝试以下操作:

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

可以通过读取工作表中的所有值(作为数组),在数组上循环,替换值,然后将整个数组写回工作表来实现这一点

下面是一个基本示例。如果工作表中包含公式,或者要在给定单元格中多次替换文本,则可能需要修改此选项

请注意,在读入和写出数据之间对工作表所做的任何更改都将丢失,并且可能会破坏此示例

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:

String.replace:

Sheet.getDataRange:


range.GetValues:

来自Cameron Roberts answer,它几乎适用于所有情况(如果所有单元格都只填充了字符串),并且只是为了方便键入(请接受他的答案)。这里是相同的脚本,映射函数中有一个小改动:我在返回参数中添加了toString()

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

这对我来说很有效,很简单

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

}
所选答案不适用于包含日期单元格的数据。 实际上,它将这些单元格更改为字符串,这不是预期的行为

我修改了代码以检查值是否为number,并仅更改字符串值

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){
      if (typeof original_value != 'string') {
        return original_value;
      } else {
        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);
}

祝你有一个美好的一天

TextFinder于2019年4月发布:

function textFinder() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  // Creates  a text finder for the range.
  const textFinder = range.createTextFinder('findValue');
  const allOccurrences = textFinder.replaceAllWith('replaceValue');
}

几乎完美。。。我想您在使用替换方法之前忘记了转换为字符串。。。我会发布一个工作版本,我也很感激你!成功了!非常感谢。我认为这是最好的方法,因为我的工作表包含数字,而不仅仅是字符串。