Google apps script 在谷歌电子表格中搜索和替换数据

Google apps script 在谷歌电子表格中搜索和替换数据,google-apps-script,google-sheets,Google Apps Script,Google Sheets,为什么我的脚本不起作用?它不搜索数据。消息显示已完成,但工作表看起来没有变化。谁能帮我 function SearchReplaceInFormula() { //begin work var pattern = Browser.inputBox("Enter the search string:"); //text on label var replacement = Browser.inputBox("Enter the replacement string:"); //text on

为什么我的脚本不起作用?它不搜索数据。消息显示已完成,但工作表看起来没有变化。谁能帮我

function SearchReplaceInFormula() { //begin work

 var pattern = Browser.inputBox("Enter the search string:"); //text on label
 var replacement = Browser.inputBox("Enter the replacement string:"); //text on label
  if (pattern == "" && replacement == "") // empty 
 {
 Browser.msgBox("Nothing to search and or replace"); 
 return;
  }
//
  var formula = SpreadsheetApp.getActiveRange().getValues(); //get a data all range
  var range = SpreadsheetApp.getActiveRange(); //get range
  var crows = range.getNumRows(); //last rows
  var ccols = range.getNumColumns(); //last columns
  var row = 0; //
  for (row = 1; row <= crows; row++)//
  {
  for (col=1; col <= ccols; col++) //
  {
 var cell = range.getCell(row, col);
 var formula = cell.getValues(); //may be getValue
 var updated = formula; //update
 while(-1 != updated.indexOf(pattern)) //what -1
 {
   updated = updated.replace(pattern, replacement); //replace before update
 }
 if (formula != updated)
 {
   cell.setFormula(updated) //set vales?
 }
  }
 }   
  Browser.msgBox("Done replacing " + pattern + " with " + replacement); //shows always
  }
函数searchreplaceformula(){//开始工作
var pattern=Browser.inputBox(“输入搜索字符串:”);//标签上的文本
var replacement=Browser.inputBox(“输入替换字符串:”);//标签上的文本
if(pattern==“”&&replacement==“”)//空
{
msgBox(“无需搜索或替换”);
返回;
}
//
var formula=SpreadsheetApp.getActiveRange().getValues();//获取所有数据范围
var range=SpreadsheetApp.getActiveRange();//获取范围
var crows=range.getNumRows();//最后一行
var ccols=range.getNumColumns();//最后一列
var行=0//

对于(row=1;row我重新编写了您的代码,并添加了一个菜单选项,以便可以轻松访问

更新:09-01-2013 添加了额外的代码以检查是否有更改(数组比较)。
还包括电子表格的工作示例:

函数onOpen(){ //获取活动电子表格 var ss=SpreadsheetApp.getActiveSpreadsheet(); //创建菜单 var菜单=[{name:“Searh/Replace”,functionName:“searchreplaceformula”}]; //添加到菜单 ss.添加菜单(“额外的”,菜单); } 函数searchreplaceformula(){ //设置参数 var pattern=Browser.inputBox(“输入搜索字符串:”); var replacement=Browser.inputBox(“输入替换字符串:”); //如果未输入任何内容,请通知用户 如果(模式=“”&替换=“”){ msgBox(“无需搜索或替换”); 返回; } //获取范围和数据 var dataRange=SpreadsheetApp.getActiveRange().getValues(); var copyRange=dataRange; var range=SpreadsheetApp.getActiveRange(); var ccols=dataRange[0]。长度,crows=dataRange.length; //通过数据进行分类 对于(var i=0;i
function onOpen() {
  // get active spreadsheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();

  // create menu
  var menu = [{name: "Searh/Replace", functionName: "SearchReplaceInFormula"}];

  // add to menu
  ss.addMenu("Extra's", menu);  
}

function SearchReplaceInFormula() {
  // set parameters
  var pattern = Browser.inputBox("Enter search string:"); 
  var replacement = Browser.inputBox("Enter replacement string:"); 

  // inform user if nothing was entered
  if(pattern == "" && replacement == "") {
    Browser.msgBox("Nothing to search and or replace");
    return;
  }

  // get ranges and data
  var dataRange = SpreadsheetApp.getActiveRange().getValues();
  var copyRange = dataRange;
  var range = SpreadsheetApp.getActiveRange(); 
  var ccols = dataRange[0].length, crows = dataRange.length; 

  // itterate through data
  for (var i=0; i<crows; i++) { 
    for (var j=0; j<ccols; j++) {      
      if(copyRange[i][j].indexOf(pattern) != -1) {
        copyRange[i][j] = copyRange[i][j].replace(pattern, replacement);
      }
    }
  }

  // set changed values
  range.setValues(dataRange);

  // check if array's are equal
  var equal = arraysEqual(copyRange, dataRange);

  // inform user what happend
  if(equal == true) {
    Browser.msgBox("No matches found...");
  } else {
    Browser.msgBox("Done replacing " + pattern + " with " + replacement); 
  }
}

function arraysEqual(arr1, arr2) {
  if(arr1.length !== arr2.length)
    return false;

  for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i])
      return false;
  }
  return true;
}