【问题标题】:look at all instances of an array in a if statement?在 if 语句中查看数组的所有实例?
【发布时间】:2019-03-01 04:08:03
【问题描述】:

我有大约 20 张不同的工作表,我编写了一些谷歌脚本来将所有数据合并到一个主工作表中。现在我希望能够排除某些工作表。我这样做的想法是将这些工作表的名称存储在一个变量中。到目前为止,这是我所拥有的,但我遇到了错误?有任何想法吗?

label 是我正在扫描每个工作表的列的名称,masterSheetName 是我存储数据的工作表。

 if (sheetName !== masterSheetName && sheetName !== skippedsheets) 

行是我遇到问题的行。它不会遍历所有跳过工作表的实例。

有没有办法通过 for each 循环来做到这一点?

function getColVals(label, masterSheetName) {

  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var colValues = []
  for ([i,sheet] in sheets) {
    var sheetName = sheet.getSheetName();
    var skippedsheets = ["HHS 1","HHS 2"];
    Logger.log(skippedsheets);
    Logger.log(skippedsheets[0]);
    if (sheetName !== masterSheetName && sheetName !== skippedsheets) {
    var colValues2 = getColValues(label,sheetName);
    colValues = colValues.concat(colValues2);
    } 

  }
  return colValues; 

}

谢谢你, 杰罗姆

【问题讨论】:

  • 请编辑问题标签以包含您正在使用的语言

标签: arrays string if-statement google-apps-script


【解决方案1】:

我发现有人编写并共享了这个名为 inArray 的函数,它运行良好。

function getColVals(label, masterSheetName) {

  var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
  var colValues = []
  for ([i,sheet] in sheets) {
    var sheetName = sheet.getSheetName();
    var skippedsheets = ["template","intro","games"];
    // Logger.log(skippedsheets);
    // Logger.log(skippedsheets[0]);
    if (sheetName !== masterSheetName && !(skippedsheets.inArray(sheetName))) {
    var colValues2 = getColValues(label,sheetName);
    colValues = colValues.concat(colValues2);
    Logger.log(sheetName);
    } 

  }
  return colValues; 

}


/*
 * @function
 * @name Object.prototype.inArray
 * @description Extend Object prototype within inArray function
 *
 * @param {mix}    needle       - Search-able needle
 * @param {bool}   searchInKey  - Search needle in keys?
 *
 */
Object.defineProperty(Object.prototype, 'inArray',{
    value: function(needle, searchInKey){

        var object = this;

        if( Object.prototype.toString.call(needle) === '[object Object]' || 
            Object.prototype.toString.call(needle) === '[object Array]'){
            needle = JSON.stringify(needle);
        }

        return Object.keys(object).some(function(key){

            var value = object[key];

            if( Object.prototype.toString.call(value) === '[object Object]' || 
                Object.prototype.toString.call(value) === '[object Array]'){
                value = JSON.stringify(value);
            }

            if(searchInKey){
                if(value === needle || key === needle){
                return true;
                }
            }else{
                if(value === needle){
                    return true;
                }
            }
        });
    },
    writable: true,
    configurable: true,
    enumerable: false
});

【讨论】:

  • 确保您了解扩展对象原型的含义。
  • @tehhowch 我根本不...试图将我的 VBA 转换为脚本。我需要以最糟糕的方式上课。我应该在哪里研究这个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多