посмотрите на все экземпляры массива в операторе if? - PullRequest
0 голосов
/ 01 марта 2019

У меня есть около 20 различных листов, и я написал скрипт Google, чтобы объединить все данные в мастер-лист.Теперь я хотел бы иметь возможность исключить определенные листы.Моя идея сделать это состояла в том, чтобы хранить имена этих листов в переменной.Это то, что у меня пока, но я получаю ошибку?Есть идеи?

label - это имя столбца, для которого я сканирую каждый лист, а masterSheetName - это лист, в котором я храню данные.

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

- это те строки, с которыми у меня проблемы.Это не происходит, хотя все случаи пропущенных листов.

Есть ли способ сделать это с помощью для каждого цикла?

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; 

}

спасибо, Джером

1 Ответ

0 голосов
/ 07 марта 2019

Я нашел эту функцию с именем 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
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...