Javascript 基于条件检索Google工作表中的选择性行

Javascript 基于条件检索Google工作表中的选择性行,javascript,google-apps-script,google-sheets,conditional,Javascript,Google Apps Script,Google Sheets,Conditional,在Googlesheet中,我想根据日期选择某些行。 我知道getRange()函数,但不知道如何向该函数添加条件。 例如,如果电子表格中有10行,其中: 两行的日期列为2019年1月1日 三行的日期列为2019年7月1日 剩余的五行有一个日期列,日期为2019年1月20日 我试图找到一种编写google sheet脚本的方法来提取2018年12月31日至2019年9月1日之间所有包含日期列的行,在这种特殊情况下,我应该得到五行 我已经编写了以下代码来创建新的工作表,但不知道如何根据条件选择范围

在Googlesheet中,我想根据日期选择某些行。 我知道getRange()函数,但不知道如何向该函数添加条件。 例如,如果电子表格中有10行,其中:

  • 两行的日期列为2019年1月1日
  • 三行的日期列为2019年7月1日
  • 剩余的五行有一个日期列,日期为2019年1月20日
  • 我试图找到一种编写google sheet脚本的方法来提取2018年12月31日至2019年9月1日之间所有包含日期列的行,在这种特殊情况下,我应该得到五行

    我已经编写了以下代码来创建新的工作表,但不知道如何根据条件选择范围:

      var spreadsheet = SpreadsheetApp.getActive();
      var sheets = spreadsheet.getSheets();
      var mainSheet = sheets[0];  
      var fileName = mainSheet.getRange("B2:C2").getDisplayValue();
      var date = Utilities.formatDate(new Date(), "GMT+5", "yyyy-MM-dd")
      var newFileName = "WS_"+date;
      var dataSheetFileList = DriveApp.getFilesByName(fileName);
      var dataSheetFile = dataSheetFileList.next();
      dataSheetFile.makeCopy(newFileName)
      var newFileUrl = DriveApp.getFilesByName(newFileName).next().getUrl();
      
      var newFile = DriveApp.getFilesByName(newFileName);
      newFile.next().setSharing(DriveApp.Access.DOMAIN_WITH_LINK, DriveApp.Permission.EDIT);
      
      var dataSheetFileList = DriveApp.getFilesByName(newFileName); 
      if(dataSheetFileList.hasNext()){
        var dataSheetFile = dataSheetFileList.next();
        var dataSheet = SpreadsheetApp.open(dataSheetFile);
        var dataSheetList = dataSheet.getSheets();
        var dataSheetCcb = dataSheetList[0];
        **<Code to select the rows based on date>**
      }
    
    var spreadsheet=SpreadsheetApp.getActive();
    var sheets=电子表格.getSheets();
    var mainSheet=sheets[0];
    var fileName=mainSheet.getRange(“B2:C2”).getDisplayValue();
    var date=Utilities.formatDate(新日期(),“GMT+5”,“yyyy-MM-dd”)
    var newFileName=“WS_”+日期;
    var dataSheetFileList=DriveApp.getFilesByName(文件名);
    var dataSheetFile=dataSheetFileList.next();
    dataSheetFile.makeCopy(新文件名)
    var newFileUrl=DriveApp.getFilesByName(newFileName).next().getUrl();
    var newFile=DriveApp.getFilesByName(newFileName);
    newFile.next().setSharing(DriveApp.Access.DOMAIN_与_链接,DriveApp.Permission.EDIT);
    var dataSheetFileList=DriveApp.getFilesByName(newFileName);
    if(dataSheetFileList.hasNext()){
    var dataSheetFile=dataSheetFileList.next();
    var数据表=电子表格应用程序打开(数据表文件);
    var dataSheetList=dataSheet.getSheets();
    var datasheetcb=dataSheetList[0];
    **<根据日期选择行的代码>**
    }
    
    示例输入Google工作表数据

    我打算使用上面的示例Google工作表自动创建一个摘要Google工作表(下面的屏幕截图):
    这是我的实现

    /* exported onOpen, userActionSelectByCondition, rowSelector_, userActionSelectByDateCondition */
    
    function onOpen() {
      SpreadsheetApp.getUi()
        .createMenu('Advansed selector')
        .addItem('Select between 40 and 1000', 'userActionSelectByCondition')
        .addItem(
          'Select between 01/02/2019 and 01/04/2019',
          'userActionSelectByDateCondition'
        )
        .addToUi();
    }
    
    /**
     * Select rows of the active sheet by condition
     */
    function userActionSelectByCondition() {
      var /** @type {condition} */ condition = function(row) {
          return row[0] > 40 && row[0] < 1000;
        };
    
      var sheet = SpreadsheetApp.getActiveSheet();
    
      rowSelector_(sheet, condition);
    }
    
    /**
     * Select rows of the active sheet by condition
     */
    function userActionSelectByDateCondition() {
      var date1 = new Date(2019, 0, 2, 0, 0, 0, 0).getTime();
      var date2 = new Date(2019, 0, 4, 0, 0, 0, 0).getTime();
      var /** @type {condition} */ condition = function(row) {
          return (
            row[2] &&
            row[2].getTime &&
            row[2].getTime() > date1 &&
            row[2].getTime() < date2
          );
        };
    
      var sheet = SpreadsheetApp.getActiveSheet();
    
      rowSelector_(sheet, condition);
    }
    
    /**
     *
     * @param {GoogleAppsScript.Spreadsheet.Sheet} sheet
     * @param {condition} callback
     * @returns {GoogleAppsScript.Spreadsheet.RangeList}
     */
    function rowSelector_(sheet, callback) {
      return sheet
        .getRangeList(
          sheet
            .getDataRange()
            .getValues()
            .reduce(function(p, c, i) {
              if (callback(c)) p.push(i + 1 + ':' + (i + 1));
              return p;
            }, [])
        )
        .activate();
    }
    
    /**
     * Callback for condition
     *
     * @callback condition
     * @param {Array<object>} row A row of the sheet
     * @returns {boolean}
     */
    
    /*导出onOpen、userActionSelectByCondition、rowSelector、userActionSelectByDateCondition*/
    函数onOpen(){
    SpreadsheetApp.getUi()
    .createMenu(“高级选择器”)
    .addItem('Select介于40和1000之间,'userActionSelectByCondition')
    .addItem(
    '选择2019年2月1日至2019年4月1日',
    “userActionSelectByDateCondition”
    )
    .addToUi();
    }
    /**
    *按条件选择活动图纸的行
    */
    函数userActionSelectByCondition(){
    var/**@type{condition}*/condition=函数(行){
    返回行[0]>40和行[0]<1000;
    };
    var sheet=SpreadsheetApp.getActiveSheet();
    行选择器(表、条件);
    }
    /**
    *按条件选择活动图纸的行
    */
    函数userActionSelectByDateCondition(){
    var date1=新日期(2019,0,2,0,0,0,0);
    var date2=新日期(2019,0,4,0,0,0,0);
    var/**@type{condition}*/condition=函数(行){
    返回(
    第[2]行&&
    行[2]。获取时间&&
    行[2]。getTime()>date1&&
    行[2]。getTime()
    示例和视频

    如果确实需要选择行,可以使用
    getRangeList().activate()


    否则,如果您需要按条件获取数据,您可以使用
    getDataRange().getValues().reduce()
    来处理值。

    您的消息严重违反了社区规则。“想要”并不意味着要展示你的努力-社区将展示它的能力。@oshliaer我写的代码到现在为止对我问的问题没有任何用处,所以没有提供任何代码。很抱歉违反了规则。我的错。我正在添加我写到现在的代码。在谷歌表单上,“选择”一词有特殊的含义。使用GoogleSheets UI,用户通过单击行标题选择一行,然后该行高亮显示。这就是你的意思吗,是否要突出显示满足条件的行以仅获取数据范围中的行的值?@Rubén。再次为错误使用词语表示歉意。我不是指您在评论中提到的含义。我的意图是根据详细信息谷歌表自动准备新的摘要谷歌表。例如,如果我们采用简单的我附上的样本数据中有不同考试日期的学生名单。根据这些数据,我试图创建不同日期考试的学生总数的摘要。我将用我预期的输出数据更新问题。感谢您的帮助和指向@oshliaer。我会尝试这些,并让你知道。再次感谢你的努力。感谢。谢谢。我可以得到你想要的输出help@Sree太棒了。我可以看出你不需要选择。只要减少你所需要的。