if(2个数组索引之间的相同值){在相应的电子表格中设置数据}

时间:2014-12-21 21:30:46

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

脚本摘要:Scrapes基本电子邮件信息(发送/接收日期,发送,发布主题,电子邮件标签)并将此数据记录到电子表格中。电子表格以电子邮件标签命名,属于某个标签的所有电子邮件都会将其信息记录到相应的电子表格中。

电子表格名称和ID在数组fileNames数组中组织为[[spreadsheet name, id],[spreadsheet name, id],[etc, etc]]

以下是一些此阵列设置。

function testFunction(){  

var emailByLabel = ["just", "a", "list", "of", "data"];

 // ** CREATE AN ARRAY OF ARRAYS. 
 // LAYER 1- [LIST OF SPREADSHEETS]
 // LAYER 2- [SPREADSHEET NAME, SPREADSHEET ID]
 var fileNames = [];
 var folders = DriveApp.getFoldersByName("email-data");

 while (folders.hasNext()) {
     var folder = folders.next();
     var files = folder.getFiles();
   while (files.hasNext()) {
      var file = files.next();
      fileNames.push([file.getName(), file.getId()]);
   } 
 }

我正在尝试将电子表格名称“匹配”到标签名称,并在匹配时将数据“设置”到相应的电子表格。相反,我得到的是所有电子表格中的所有数据。

for(var l=0;l<fileNames.length;l++){
    for(var i=0;i<emailByLabel.length;i++){
      if(emailByLabel[i][1] == fileNames[l][0]){

        var ss = SpreadsheetApp.openById(fileNames[l][1]).getSheets()[0];
        Logger.log(fileNames[l][0]);
        Logger.log(fileNames[l][1]);

        ss.getRange(2,1,emailByLabel.length,5).setValues(emailByLabel);

      } else {
        Logger.log("MATCH, BROKE!");
        Logger.log(fileNames[l][0]);
        Logger.log(fileNames[l][1]);
      }
    }
  }
}

我试过替换

    ss.getRange(2,1,emailByLabel.length,5).setValues(emailByLabel);

    ss.getRange(2,1,emailByLabel[i].length,5).setValues(emailByLabel[i]);

但我收到错误Cannot convert Array to Object[][]

完整代码,其中包含一些突出显示的相关代码行:http://pastie.org/9793256#96,100,109,117,123-139

2 个答案:

答案 0 :(得分:0)

emailByLabel[i]不会工作,因为它是一维数组。

请尝试使用此功能:

ss.getRange(2,1,emailByLabel[i].length,5).setValues([emailByLabel[i]]);

答案 1 :(得分:0)

也许尝试使用.indexOf()进行匹配? Documentation

for(var l=0;l<fileNames.length;l++){  
  if(emailByLabel.indexOf(fileNames[l][0]) !== -1) {

    var ss = SpreadsheetApp.openById(fileNames[l][1]).getSheets()[0];
    Logger.log(fileNames[l][0]);
    Logger.log(fileNames[l][1]);

    ss.getRange(2,1,emailByLabel.length,5).setValues(emailByLabel);

  } else {
    Logger.log("MATCH, BROKE!");
    Logger.log(fileNames[l][0]);
    Logger.log(fileNames[l][1]);
  }
}
}