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.
...