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,下面是一个字符串,而不是对您的 Range 的引用。

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

复制下面的代码并通过脚本管理器或菜单项运行它。

它适用于所选范围的任何内容,无论是单个单元格还是延伸到多行和多列。

它会弹出一条 toast 消息,告诉您该过程何时完成,但它会使 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 回答