2

スクリプトが機能しないのはなぜですか? データを検索しません。メッセージは完了を示していますが、シートは変更されていないように見えます。誰を助けることができますか?

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

1 に答える 1

0

簡単にアクセスできるように、コードを作り直してメニュー オプションを追加しました。

更新: 2013 年 9 月 1 日 、何かが変更されたかどうかを確認するコードを追加しました (配列比較)。
スプレッドシートの実際の例も含まれています: Google スプレッドシートでのデータの検索と置換

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;
}
于 2013-01-08T20:19:40.943 に答える