【问题标题】:How can I get Google App Script is to loop and not only pull from the first row我怎样才能让 Google App Script 循环,而不仅仅是从第一行拉
【发布时间】:2021-07-02 17:45:25
【问题描述】:
function buildReport() {
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invalid Login MM Pull Internal");
  var ws2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invalid Login External MM Pull External");

  var data = ws.getRange("A2:G" + ws.getLastRow()).getValues();
  var data2 = ws2.getRange("A2:G" + ws2.getLastRow()).getValues();
  let payload = buildAlert(data);
  let payload2 = buildAlert(data2)

  sendAlert(payload);
}

//buildAlert Fuction
function buildAlert(data) {
  var ws = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invalid Login MM Pull Internal");
  var data = ws.getRange("A2:G" + ws.getLastRow()).getValues();

  for (var i = 0; i < data.length; i++){
    if (data[i][5] !== "SLACK_SENT")
  var ofo = 1;
  var restaurant = 2;
  var name = 3;
  var email = 4;
  var sent = 5;
  let payload = {
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": ":bell: Invalid Creds :bell:"
        }
      },
      {
        "type": "divider"
      },
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": data[i][2] + " has invalid creds for " + data[i][1]
        }
      },
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "Please contact have AE contact " + data[i][3] + " at " + data[i][4]
        }
      },
    ]
  };
  ws.getRange(2 + i,7).setValue("SLACK_SENT");
}
};
(function buildAlert(data2) {
  var ws2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Invalid Login External MM Pull External");
  var data2 = ws2.getRange("A2:G" + ws2.getLastRow()).getValues();

  for (var i = 0; i < data2.length; i++){
    if (data2[i][5] !== "SLACK_SENT")
  var ofo = 1;
  var restaurant = 2;
  var name = 3;
  var email = 4;
  var sent = 5;
  let payload = {
    "blocks": [
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": ":bell: Invalid Creds :bell:"
        }
      },
      {
        "type": "divider"
      },
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": data2[i][2] + " has invalid creds for " + data2[i][1]
        }
      },
      {
        "type": "section",
        "text": {
          "type": "mrkdwn",
          "text": "Please contact have AE contact " + data2[i][3] + " at " + data2[i][4]
        }
      },
    ]
  };
  ws2.getRange(2 + i,7).setValue("SLACK_SENT");
}
});
function sendAlert(payload) {
  const webhook = "https://hooks.slack.com/services/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";
  var options = {
    "method": "post", 
    "contentType": "application/json", 
    "muteHttpExceptions": true, 
    "payload": JSON.stringify(payload) 
  };
try {
    UrlFetchApp.fetch(webhook, options);
  } catch(e) {
    Logger.log(e);
  }
};

**试图从谷歌表发送松弛消息,但现在它只是从第一行拉,它不会循环。 唯一循环的是当我运行代码时,它会填充一个将其标记为 SLACK_SENT 的单元格。随时问我任何问题或需要澄清任何事情。我正在从两个电子表格中提取数据,并希望为这两个工作表发送 slack。

【问题讨论】:

  • 你应该解释你到底卡在哪里,换句话说,你的代码的哪一部分有没有按你预期工作的循环。如果您不知道循环在 JavaScript 中是如何工作的,请阅读 Loops and iteration
  • 我有点困惑为什么你有buildAlert()的2个定义,为什么你用buildReport()中的参数调用函数,但同时你覆盖数据时你读取buildAlert() 中的工作表值?我想跟进@Ruben 的查询,请确定哪些行数据没有被循环?

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


【解决方案1】:
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');//data sheet
const osh = ss.getSheetByName('Sheet2');//output sheet
const [hA, ...vs] = sh.getDataRange().getValues();
let col = {};
let oA = [];//data desired
hA.forEach((h,i) => col[h] = i+1);
vs.forEach(r => {
  if(r[col['columntitle desired ']]  == "value desired") {
    oA.push(r);// push entire row
  }
});
osh.getRange(sh.getLastRow() + 1, 1, oA.length, oA[0].length).setValues(oA);

【讨论】:

  • 你能解释一下吗?我需要在哪里更换或更换什么?
  • 这只是一个如何循环数据的示例,根据您想要的列中的值选择您想要的行,然后将它们放入另一个工作表中。所以它结合了使用数组 forEach 方法的循环。您希望如何使用它取决于您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2011-04-26
  • 2013-08-18
相关资源
最近更新 更多