尝试创建一个脚本,如果工作表中的特定单元格/范围为空,则通过电子邮件发送

问题描述 投票:1回答:1

如果某些单元格留空,我希望在每天结束时发送一封电子邮件(我可以使用触发器)。

换句话说,某些单元格需要在每天结束时填写,如果没有填写,我想发送一封电子邮件(如果可能的话,发送到多个地址)以提醒经理。

例如,我有兴趣检查任何值的单元格是:B18:B19,C24(还有更多范围和我希望检查的单个单元格)

凭借我所拥有的,我收到一个错误代码

“在对象中找不到函数isBlank”

我对Scripts来说是一个荒谬的新手,这是我在其他论坛上发现的一小块代码

function myFunction() {
  var ui = SpreadsheetApp.getUi();
  var sheet = SpreadsheetApp.getActive().getSheetByName("Routes & Hours"); //this is the sheet that the data to be checked is in
  var sunCells = [
    [sheet.getRange("B18:B19").getValue(),
     sheet.getRange("C24").getValue()
    ]
                 ];
  if(sunCells.isBlank()){      
MailApp.sendEmail("[email protected]", "incomplete required cells", "message");
    } 
}

此外,有没有办法确定哪些单元格是空白单元格并在电子邮件警报中发送?

任何帮助是极大的赞赏

google-apps-script google-sheets
1个回答
0
投票
  • 您想要分别检查“B18”,“B19”和“C24”是否为空。
  • 如果包含空单元格,则需要发送包含空单元格的1个通知的电子邮件。

如果我的理解是正确的,那么这个修改怎么样?我认为你的情况有几个答案,所以请把它当作其中之一。

Modification points:

  • 在您的脚本中,sunCells是一个包含单元格值的数组。并且sheet.getRange("B18:B19").getValue()仅检索“B18”的值。
  • isBlank()可用于Range。

反映上述要点的脚本如下。

Modified script 1:

如果使用“B18:B19”作为“B18”和“B19”,则可以使用以下脚本。在该修改中,a1Notation仅由一个单元分隔,如“B18:B19”到“B18”和“B19”。这样,可以检查每个单元格。在这个脚本中,当“B18:B19”用于isBlank()时,如果“B18”和“B19”都为空,则变为真。

From:
var sunCells = [
  [sheet.getRange("B18:B19").getValue(),
   sheet.getRange("C24").getValue()
  ]
];
if(sunCells.isBlank()){      
  MailApp.sendEmail("[email protected]", "incomplete required cells", "message");
}
To:
var sunCells = ["B18", "B19", "C24"]; // Modified
var ranges = sheet.getRangeList(sunCells).getRanges(); // Added
var res = sunCells.filter(function (_, i) {return ranges[i].isBlank()}); // Added
if (res.length > 0) { // Modified
  MailApp.sendEmail("[email protected]", "incomplete required cells " + res, "message"); // Modified
}

Modified script 2:

如果要原样使用“B18:B19”的a1Notation,可以使用以下脚本。在该脚本中,“B18:B19”被解析为“B18”和“B19”。这样,可以检查每个单元格。当你使用它时,请运行myFunction()

// This method is from https://stackoverflow.com/a/21231012/7108653
function columnToLetter(column) {
  var temp, letter = '';
  while (column > 0) {
    temp = (column - 1) % 26;
    letter = String.fromCharCode(temp + 65) + letter;
    column = (column - temp - 1) / 26;
  }
  return letter;
}

function myFunction() {
  var ui = SpreadsheetApp.getUi();
  var sheet = SpreadsheetApp.getActive().getSheetByName("Routes & Hours");
  var sunCells = ["B18:B19", "C24"];

  // The following script was modified.
  var cells = sunCells.map(function(e) {
    var temp = [];
    var range = sheet.getRange(e);
    var r = {
      startRowIndex: range.getRow(),
      endRowIndex: range.getRow() + range.getNumRows(),
      startColumnIndex: range.getColumn(),
      endColumnIndex: range.getColumn() + range.getNumColumns(),
    }
    for (var i = r.startRowIndex; i < r.endRowIndex; i++) {
      for (var j = r.startColumnIndex; j < r.endColumnIndex; j++) {
        temp.push(columnToLetter(j) + i);
      }
    }
    return temp;
  })
  cells = Array.prototype.concat.apply([], cells);
  var ranges = sheet.getRangeList(cells).getRanges();
  var res = cells.filter(function (_, i) {return ranges[i].isBlank()});
  if (res.length > 0) {
    MailApp.sendEmail("[email protected]", "incomplete required cells " + res, "message");
  }
}

Note:

  • 这是一个简单的修改。所以请根据您的情况进行修改。
  • 如果要添加和修改要检查的单元格,请将它们添加到sunCells

References:

如果我误解了你的问题,请告诉我。我想修改它。

© www.soinside.com 2019 - 2024. All rights reserved.