0

スプレッドシートのセルD3の数式の一部を置き換えようとしていますが、置き換えられないようです。D3の式は非常に長いですが、searchtext変数となるものを置き換えて、replacetext変数に置き換えるだけで済みます。何か案は?これが私のコードです。

function dashboards(){ 

var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var origSheet1 = ss1.getSheetByName('Daily');
var searchtext = Browser.inputBox("Enter search text");
var replacetext = Browser.inputBox("Enter replace text");
var form = origSheet1.getRange("D3").getFormulaR1C1();
form.indexof(searchtext);
var updated = form.replace(searchtext, replacetext);
form.setFormula(updated);}
4

2 に答える 2

2

あなたは遠くない。問題はform、以下が文字列であり、範囲への参照ではないことです。

var form = origSheet1.getRange("D3").getFormulaR1C1();

挿入することでこれを見ることができます

Logger.log(form + "; type: " + typeof form); //String

その行の後、スクリプト エディターでログを確認します。

あなたはただ変更する必要があります

form.setFormula(updated);

origSheet1.getRange("D3").setFormulaR1C1(updated);

実際の範囲を更新します。

于 2012-11-15T23:12:17.640 に答える
1

以下のコードをコピーして、スクリプトマネージャーまたはメニュー項目から実行します。

単一のセルであろうと、複数の行と列にまたがっていようと、選択した範囲が何であれ、動作します。

プロシージャが終了したことを通知するトーストメッセージがポップアップ表示されますが、さらに置換を行う場合に備えて、UiInstanceは開いたままになります。

開いたままにして、複数の選択範囲で数式の複数の検索/置換を実行したり、異なるシートで同じ検索を実行したりできます。

function handySRF() { // script composed by ailish@ahrosters.com
  var ss = SpreadsheetApp.getActive();
  var app = UiApp.createApplication().setHeight(200).setWidth(270).setTitle('Search and Replace In Formulas');

  var panel = app.createAbsolutePanel().setId('panel').setHeight(198).setWidth(268)
      .setStyleAttribute('background', 'lightCyan');

  var lblSearch = app.createLabel('Search for:').setId('lblSearch');
  var txtSearch = app.createTextBox().setId('txtSearch').setName('txtSearch');

  var lblReplace = app.createLabel('Replace with:').setId('lblReplace');
  var txtReplace = app.createTextBox().setId('txtReplace').setName('txtReplace');

  var handler = app.createServerHandler('btnStartSearch'); 
  var btnStartSearch = app.createButton('Start Search').addClickHandler(handler)
      .setStyleAttribute('background', 'lightGreen');
  handler.addCallbackElement(panel);

  var handler2 = app.createServerHandler('btnCloseWindow'); 
  var btnCloseWindow = app.createButton('Close Window').addClickHandler(handler2)
      .setStyleAttribute('background', 'lightYellow');
  handler2.addCallbackElement(panel);

  panel.add(lblSearch, 10, 6)
  panel.add(txtSearch, 10, 33)
  panel.add(lblReplace, 10, 75)
  panel.add(txtReplace, 10, 100)
  panel.add(btnStartSearch, 10, 151)
  panel.add(btnCloseWindow, 130, 151)
  app.add(panel);
  ss.show(app);
};

function btnStartSearch(e) {
  var ss = SpreadsheetApp.getActive();
  var app = UiApp.getActiveApplication();

  var search = e.parameter.txtSearch;
  var replace = e.parameter.txtReplace;

  var rows = ss.getActiveSelection();
  var numRows = rows.getNumRows();
  var formulas = rows.getFormulas();
  var newFormulas = [];

  for (var i = 0; i <= numRows - 1; i++) {
    var oldData = formulas[i];
    var newData = [];
    for (var j=0; j<oldData.length; ++j) {
        var item = oldData[j].replace(new RegExp(search, "g"), replace);
        newData.push(item);
    }
    newFormulas.push(newData);
  }
  rows.setFormulas(newFormulas);
  var str = 'Finished replacing ' + search + ' with ' + replace;
  ss.toast(str, '', 2);
};


function btnCloseWindow(e) {
  var ss = SpreadsheetApp.getActive();
  var app = UiApp.getActiveApplication();
  app.close();
  return app;
};
于 2012-11-15T22:13:36.247 に答える