【问题标题】:Google Apps Script If Statement Matches Cell ValueGoogle Apps 脚本 If 语句与单元格值匹配
【发布时间】:2018-11-21 15:06:18
【问题描述】:

我对 Google 应用脚本和 If 语句有疑问。

我已将数据从我的 Ads 帐户推送到 Google 表格。然后,我想要多张工作表从中提取特定数据。所以我试图让一张纸成为所有数据的来源。然后我可以为每个报告选择我需要的部分数据。

主要是获取星期几==今天的范围。

我已经尝试通过添加一个检查变量来执行此操作,然后将其传递到一个 for 循环中,检查 day == dayName 变量。

我目前遇到了超时问题。这让我相信我这样做的方式有问题。

数据集是 21k 行: A 是日期,B 是星期几,C 是广告系列,依此类推,直到第 I 列。

我对脚本游戏还是很陌生,非常感谢任何帮助。

我希望这样做的原因是因为我很难在广告脚本中包含 where 语句以按 DayOfWeek 过滤。然后我认为这可能是另一种解决方案。

谢谢, 利亚姆

function myFunction() {

 //This is the days of the week for the today lookup
 var days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];

 //This is today's date
 var end = new Date().toISOString().slice(0,10);

 //This supplies the current day of week
 var dow = new Date(end);
 var dayName = days[dow.getDay()];

 var sss = SpreadsheetApp.openById('SheetID'); //ID of the sheet

 var ss = sss.getSheetByName('googleData'); //Sheet name

 var range = ss.getRange('A1:I'); //The range to copy
 var check = ss.getRange('B2:B').getValues(); The range to if statement against
 var data = range.getValues();

 var tss = SpreadsheetApp.openById('SheetID'); //destination sheet ID

 var ts = tss.getSheetByName('usedData'); //Destination sheet name

  for (var i=0;i<check.length; i++) {
   if(check[i]==dayName) { 
      ts.getRange(1, 1, data.length, data[0].length).setValues(data); //you will need to define the size of the copied data see getRange()
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

    我相信您想要的是找到与当前星期几匹配的所有行并将其复制到 userData。试试这个。

    function myFunction() {
      try {
        // javascript getDay starts with Sunday
        var days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
        var today = new Date();
        var dayOfWeek = days[today.getDay()];
        // Do you need id or just active spreadsheet?
        var spread = SpreadsheetApp.getActiveSpreadsheet();
        var sheet = spread.getSheetByName("googleData");
        // Get all data columns A thru I
        var data = sheet.getRange(1,1,sheet.getLastRow(),9).getValues();
        // results will become a 2D array to use setValues
        var results = [];
        for( var i=0; i<data.length; i++ ) {
          // Day of week in column B
          if( data[i][1] === dayOfWeek ) results.push(data[i]);
        }
        sheet = spread.getSheetByName("usedData");
        sheet.clear();
        sheet.getRange(1,1,results.length,results[0].length).setValues(results);
      }
      catch(err) {
        Logger.log(err);
      }
    }
    

    【讨论】:

    • 感谢您的快速回复。当我将此脚本放置在使用的数据文件中时,我使用了工作表 ID,因此它从 ID 中提取。我应该将其附加到 Google 数据中吗?
    • 补充一下,我刚刚测试了这两种方法,脚本没有触发但也没有抛出错误。
    • 执行日志显示如下:[18-11-21 15:46:58:454 GMT] Logger.log([ReferenceError: "result" is not defined., []]) [0秒] [18-11-21 15:46:58:455 GMT] 执行成功 [2.282 秒总运行时间]
    • 糟糕,我输入了 result.push(),它应该是 results.push()
    • 太棒了,我应该注意到这么愚蠢的事情。我刚刚测试过,它推送了正确的数据。我注意到它不会覆盖整个工作表。我有更多的数据行,它只替换了它覆盖的行。它应该替换所有行吗?如果没有,我可以看看如何让它发挥作用。尝试尽可能多地学习并非常感谢所提供的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多