复制下面的代码,并通过脚本管理器或菜单项运行它。
它可以在任何选定的范围内进行操作,无论是单个单元还是延伸到多行&列。
它会弹出一条吐司消息,告诉你何时该过程已经完成,但是如果你想进行更多的替换,它会使UiInstance处于打开状态。
您可以保持它打开并在多个选择的公式中执行多个搜索/替换或在不同的工作表上进行相同的搜索。
function handySRF() { // script composed by [email protected]
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;
};
这听起来很合逻辑,但每当我运行脚本都不会替换文本。我会分享我的电子表格,以便您有一个想法。我想用S-Dec-2012取代S-Nov-2012。我做了你指定的更改,但仍然没有得到文本替换。这是电子表格。 https://docs.google.com/a/infolinksa.net/spreadsheet/ccc?key=0AgIoLd4RqjMXdE5ybDVkTTFmWHFCSllCeWd4Vm5VR1E#gid=0 –
啊 - 用'indexof'删除行 - 目前没有添加任何内容,并且套管错误(应该是'indexOf')。由此引发的错误会阻止脚本的其余部分运行。 –