Google apps script 用脚本替换单元格的公式

Google apps script 用脚本替换单元格的公式,google-apps-script,Google Apps Script,我试图替换电子表格D3单元格中公式的某些部分,但我似乎做不到。D3中的公式很长,但我只需要替换searchtext变量,并将其替换为replacetext变量。有什么想法吗?这是我的密码 function dashboards(){ var ss1 = SpreadsheetApp.getActiveSpreadsheet(); var origSheet1 = ss1.getSheetByName('Daily'); var searchtext = Browser.inputBox("E

我试图替换电子表格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);}

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

它对所选范围进行操作,无论是单个单元格还是扩展到多个行和列

它会弹出一条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;
};
函数handySRF(){//脚本由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为:')).setId('lblReplace');
var txtReplace=app.createTextBox().setId('txtReplace').setName('txtReplace');
var handler=app.createServerHandler('btnStartSearch');
var btnStartSearch=app.createButton('Start Search')。addClickHandler(handler)
.setStyleAttribute(“背景”、“浅绿色”);
handler.addCallbackElement(面板);
var handler2=app.createServerHandler('btnCloseWindow');
var btnCloseWindow=app.createButton(“关闭窗口”).addClickHandler(handler2)
.setStyleAttribute(“背景”、“淡黄色”);
handler2.addCallbackElement(面板);
面板。添加(lblSearch,10,6)
面板.添加(txtSearch,10,33)
面板。添加(lblReplace,10,75)
面板。添加(TXT替换,10100)
panel.add(btnStartSearch,10151)
面板添加(btnCloseWindow,130151)
应用程序添加(面板);
ss.show(app);
};
功能btnStartSearch(e){
var ss=SpreadsheetApp.getActive();
var app=UiApp.getActiveApplication();
var search=e.parameter.txtSearch;
var replace=e.parameter.txtplace;
var rows=ss.getActiveSelection();
var numRows=rows.getNumRows();
var formulas=rows.getFormulas();
var newFormulas=[];

对于(var i=0;i复制下面的代码,并通过脚本管理器或菜单项运行它

它对所选范围进行操作,无论是单个单元格还是扩展到多个行和列

它会弹出一条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;
};
函数handySRF(){//脚本由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为:')).setId('lblReplace');
var txtReplace=app.createTextBox().setId('txtReplace').setName('txtReplace');
var handler=app.createServerHandler('btnStartSearch');
var btnStartSearch=app.createButton('Start Search')。addClickHandler(handler)
.setStyleAttribute(“背景”、“浅绿色”);
handler.addCallbackElement(面板);
var handler2=app.createServerHandler('btnCloseWindow');
var btnCloseWindow=app.createButton(“关闭窗口”).addClickHandler(handler2)
.setStyleAttribute(“背景”、“淡黄色”);
handler2.addCallbackElement(面板);
面板。添加(lblSearch,10,6)
面板.添加(txtSearch,10,33)
面板。添加(lblReplace,10,75)
面板。添加(TXT替换,10100)
panel.add(btnStartSearch,10151)
面板添加(btnCloseWindow,130151)
应用程序添加(面板);
ss.show(app);
};
功能btnStartSearch(e){
var ss=SpreadsheetApp.getActive();
var app=UiApp.getActiveApplication();
var search=e.parameter.txtSearch;
var replace=e.parameter.txtplace;
var rows=ss.getActiveSelection();
var numRows=rows.getNumRows();
var formulas=rows.getFormulas();
var newFormulas=[];

对于(var i=0;i来说,你并不遥远。问题是
表单
,下面是一个字符串,而不是对你的范围的引用

var form = origSheet1.getRange("D3").getFormulaR1C1();
您可以通过插入

Logger.log(form + "; type: " + typeof form); //String
然后在脚本编辑器中检查日志

你只需要改变一下

form.setFormula(updated);


更新实际范围。

离您不远了。问题是
表单
,下面是一个字符串,不是对您范围的引用

var form = origSheet1.getRange("D3").getFormulaR1C1();
您可以通过插入

Logger.log(form + "; type: " + typeof form); //String
然后在脚本编辑器中检查日志

你只需要改变一下

form.setFormula(updated);


更新实际范围。

谢谢你的回答,这是有帮助的,但不是我要找的。谢谢你的回答,这是有帮助的,但不是我要找的。这听起来很合理,但每当我运行脚本时,脚本都不会替换文本。我将共享我的电子表格,以便你能有一个想法。我ant将S-Nov-2012替换为S-Dec-2012。我做了您指定的更改,但仍然没有得到文本替换。这是电子表格。啊-用
indexof
删除行-它当前没有添加任何内容,并且大小写错误(应该是
indexof
)。其中的一个错误是停止其余脚本的运行。这听起来很合理,但是