Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 使用谷歌应用程序脚本发送股票警报电子邮件_Google Apps Script_Google Sheets - Fatal编程技术网

Google apps script 使用谷歌应用程序脚本发送股票警报电子邮件

Google apps script 使用谷歌应用程序脚本发送股票警报电子邮件,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试设置一个简单的谷歌应用程序脚本,以便在各种组件的库存达到定义的阈值时发送电子邮件。在阅读和搜索之后,我整理了一个脚本,它看起来很有效,但当我增加从电子表格中提取的范围时,它开始发送错误的电子邮件 这是我的代码,详细信息如下 var ss=SpreadsheetApp.getActive(); var sheet=ss.getSheetByName(“库存报告”); var howFar=5//sheet.getMaxRows();//有多少行数据 var onHand=sheet.g

我正在尝试设置一个简单的谷歌应用程序脚本,以便在各种组件的库存达到定义的阈值时发送电子邮件。在阅读和搜索之后,我整理了一个脚本,它看起来很有效,但当我增加从电子表格中提取的范围时,它开始发送错误的电子邮件

这是我的代码,详细信息如下

var ss=SpreadsheetApp.getActive();
var sheet=ss.getSheetByName(“库存报告”);
var howFar=5//sheet.getMaxRows();//有多少行数据
var onHand=sheet.getRange(2,14,howFar,1).getValues();
var最小值=sheet.getRange(2,16,howFar,1).getValues();
var itemNum=sheet.getRange(2,1,howFar,1).getValues();
var itemName=sheet.getRange(2,2,howFar,1).getValues();
变量sendTo=”test@gmail.com";
var积压=1.5;//警告系数超过最小值
函数stockAlert(){
对于(var i=0;i最低库存[i]){
MailApp.sendmail(sendTo,“测试库存再订购通知”,itemNum[i]+“”+itemName[i]+“-库存较低!当前库存为“+onHand[i]+”。最小值为“+Minimum[i]+”);
}
else if(最小值[i]>0和现有值[i]<最小值[i]){
MailApp.sendmail(sendTo,“测试库存循环通知”,itemNum[i]+“”+itemName[i]+“-库存至关重要,将耗尽!当前库存为“+现有库存[i]+”。最小库存为“+最小库存[i]+”);
} 
}

}
这些值是否有可能在电子表格中被视为文本?请注意,字符串
“1830”
确实是
如果您愿意,您可以共享一个测试电子表格吗?我会在电子表格的聊天中看到您的案例。顺便说一句,您的代码看起来很好,真的很好weird@JSmith我设置了一个测试表。我刚刚粘贴了原始工作表中的结果值。我在测试脚本时得到了相同的结果。干得好,我以前就该想一想。他还可以使用
Number(string)
函数
onHand
已经定义好了,所以我使用了
onH
,它工作了。谢谢@米卡罗斯,哎呀,没听到。请注意,数组比较与元素比较之间存在一个基本问题-
getValues
返回一个“2-D”数组,而不是1D数组。@tehhowch感谢您提供更多信息!要学的东西太多了
Logger.log(minimum[i]); // "[600.0]"
Logger.log(typeof minimum[i]); // object

Logger.log(minimum[i][0]); // 600.0
Logger.log(typeof minimum[i][0]); // number
for (var i = 0; i < onHand.length; i++) {
  var min = parseInt(minimum[i][0], 10),
      avail = parseInt(onHand[i][0], 10);
  if (avail < min) {
    // send critical stock email
  }
  else if (avail < min * overStock) {
    // send reorder email
  }
  else {
    // on hand amount is > needed
  }
}
function getStockAmounts() {
  // Return an object of the inventory values.
  const stock = SpreadsheetApp.getActive().getSheetByName("some name");
  const numHeaders = 1,
        numVals = stock.getLastRow() - numHeaders;
  return [
    {p: 'minimum', col: 16},
    {p: 'onHand', col: 14},
    {p: 'itemName', col: 2},
    {p: 'itemNum', col: 1}
  ].reduce(function (obj, key) {
    obj[key.p] = stock.getRange(numHeaders + 1, key.col, numVals, 1)
      .getValues()
      // Return a 1-D array, rather than a 2-D array, since all these are single-column variables.
      .map(function (row) { return row[0]; });
    return obj;
  }, {'numVals': numVals});
}
function foo() {
  const stocks = getStockAmounts();
  for (var i = 0; i < stocks.numVals; i++) {
    var min = stocks.minimum[i]; // 1D arrays, so only 1 index is needed.
    ...