如何用“字符串”替换Google表格列中非空单元格的值?

时间:2019-07-23 09:24:17

标签: javascript google-apps-script google-sheets

我要在所有工作表中将价格替换为“电子邮件”。由于所有工作表的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')仅替换该列中的所有单元格值。

我应该使用什么条件来迭代并仅更改该列中的价格。

之前:

Sheet Screenshot

运行此脚本后:

2 个答案:

答案 0 :(得分:1)

问题:

您的脚本根本不检查单元格。


解决方案:

首先,您需要获取范围内的值,这可以通过使用getValues()来实现。这会将该范围内的所有值推入一个数组,我们可以将其用于下一步。

var values = sheet.getRange('D1:D').getValues();

然后使用for循环和if语句遍历每个数组对象,以使用typeof检查值是否为数字。如果找到了数值,则可以对setValue()中的行使用j + 1getRange()(因为数组是0索引的,所以需要加1):

for (j = 0; j < values.length; j++) {
  if (typeof values[j][0] === 'number') {
    sheet.getRange(j + 1, 4).setValue('Email');
  }
}

示例1(较慢):

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');
      }
    }
  }
}

示例2(更快):

正如@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');
       }
    }