我正在尝试让此功能在电子表格上运行,并查找并替换所有撇号。现在它可以工作,但是花费的时间太长了,现在在我的电子表格中,我有12行,只花了128秒就可以运行这些行。我想尝试做的只是在电子表格的最后一行上激活。
我尝试通过添加var row = r.getLastRow();
和更改一些使用行的点来使其工作。这样做时,我无法使其运行。我将在每次提交表单时运行它,因此它应该始终是最后一行。
我从以下位置获得了代码:https : //productforums.google.com/d/msg/docs/7IlOotksJ4I/liXa0SrC-R4J
function fandr() {
var r=SpreadsheetApp.getActiveSheet().getDataRange();
var rws=r.getNumRows();
var cls=r.getNumColumns();
var i,j,a,find,repl;
find="'";
repl="";
for (i=1;i<=rws;i++) {
for (j=1;j<=cls;j++) {
a=r.getCell(i, j).getValue();
if (r.getCell(i,j).getFormula()) {continue;}
try {
a=a.replace(find,repl);
r.getCell(i, j).setValue(a);
}
catch (err) {continue;}
}
}
}
我认为,用脚本替换文本的最佳方法是使用map
。此功能由@ serge-insas在此处建议。您可以对其进行修改以获得最佳性能结果,并仅替换最后一行的值:
function testReplaceInRange(){
var sheet = SpreadsheetApp.getActiveSheet()
var lastRow = sheet.getLastRow();
var DataRange = sheet.getDataRange();
var range = DataRange.offset(lastRow - 1, 0, 1); // last Data row
replaceInRange(range,"'","");
}
function replaceInRange(range, to_replace, replace_with) {
//get the current data range values as an array
var values = range.getValues();
// make RegExp
var Rep = new RegExp(to_replace, 'g');
//loop over the rows in the array
for(var row in values){
//use Array.map to execute a replace call on each of the cells in the row.
var replaced_values = values[row].map(function(original_value){
return original_value.toString().replace(Rep,replace_with);
});
//replace the original row values with the replaced values
values[row] = replaced_values;
}
//write the updated values to the range
range.setValues(values);
}
我还使用了带有正则表达式的trich,这是@ cory-gross在这里建议的。目的是放置所有出现的to_replace
文本,而不仅仅是第一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句