我要在所有工作表中将价格替换为“电子邮件”。由于所有工作表的D列都相同,因此我尝试了此代码。
function doTest() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (var i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
sheet.getRange('D1:D').setValue('Email');
//if (sheet.getRange('D1:D').getValue() != ""){
// sheet.getRange('D1:D').setValue('Email');
//}
}
}
.setvalue('Email')仅替换该列中的所有单元格值。
我应该使用什么条件来迭代并仅更改该列中的价格。
之前:
运行此脚本后:
答案 0 :(得分:1)
您的脚本根本不检查单元格。
首先,您需要获取范围内的值,这可以通过使用getValues()
来实现。这会将该范围内的所有值推入一个数组,我们可以将其用于下一步。
var values = sheet.getRange('D1:D').getValues();
然后使用for
循环和if
语句遍历每个数组对象,以使用typeof
检查值是否为数字。如果找到了数值,则可以对setValue()
中的行使用j + 1
和getRange()
(因为数组是0索引的,所以需要加1):
for (j = 0; j < values.length; j++) {
if (typeof values[j][0] === 'number') {
sheet.getRange(j + 1, 4).setValue('Email');
}
}
function replaceBlanks() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
var values = sheet.getRange('D1:D').getValues();
for (j = 0; j < values.length; j++) {
if (typeof values[j][0] === 'number') {
sheet.getRange(j + 1, 4).setValue('Email');
}
}
}
}
正如@TheMaster正确指出的那样,如果我们构建一个数组并改用setValues()
,该脚本将运行得更快,因此,如果您遇到性能问题,请执行以下代码:
function replaceBlanks() {
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
for (i = 0; i < sheets.length; i++) {
var sheet = sheets[i];
var values = sheet.getRange('D1:D').getValues();
var array = [];
for (j = 0; j < values.length; j++) {
if (typeof values[j][0] === 'number') {
array.push(['Email']);
} else {
array.push([values[j][0]]);
}
}
sheet.getRange(1, 4, array.length).setValues(array);
}
}
答案 1 :(得分:0)
您的范围'D1:D'
是一个数组数组,要使您的if
条件以预期的方式工作,您需要分别访问范围的每个单个单元格的值:
var range=sheet.getRange(1,4,sheet.getLastRow(),1);
for(var i=1; i<=sheet.getLastRow; i++){
var cell=range.getCell(i,1);
if (cell.getValue() != ""){
cell.setValue('Email');
}
}