首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果在其他选项卡上的多个范围之一中满足条件,则构建列表

如果在其他选项卡上的多个范围之一中满足条件,则构建列表
EN

Stack Overflow用户
提问于 2015-06-27 06:56:15
回答 1查看 18关注 0票数 0

我正在尝试编写一个脚本,根据主题是否出现在每个选项卡中的特定年份范围内,为一行中的每个主题构建一个列表。

下面是我的数据的一个示例版本以供参考:https://docs.google.com/spreadsheets/d/1fRhsIAeQd2qDIWILhvhnoTr1Po009RljdjrL9TYwncI/edit#gid=0

我手动填写了"History“选项卡上的一些行和列B,但这正是我希望脚本生成的内容(单元格突出显示为红色)。

到目前为止,我最好的想法是为所有名称创建一个对象,并使用for循环遍历每个名称……然后为每个角色和年份创建单独的对象,并使用条件检查遍历这些对象以搜索名称。如果名称出现在该年份范围内,也许我可以将一些文本推送到新对象中?

我开始为此编写一个脚本,但很快就意识到这将是非常痛苦和低效的。有什么建议可以让我更有效率地做这件事吗?我的数据可以追溯到几年前的数百人,所以手动更新不再是一种选择!

谢谢!!

代码语言:javascript
复制
    function buildHistory() {
  var ss = SpreadsheetApp.getActive();

  var historySheet = ss.getSheetByName("History");
  var names = historySheet.getRange(2, 1, historySheet.getLastRow(), 1).getValues();

  var pastMems = ss.getSheetByName("Past Members");
  var mems2015 = pastMems.getRange(3, 2, pastMems.getLastRow(), 1).getValues();
  var mems2014 = pastMems.getRange(3, 5, pastMems.getLastRow(), 1).getValues();

  for (var i = 0; i < names.length; i++) {
    var name = names[i];
    Logger.log(name);

    for (var j = 0; j < mems2015.length; j++) {
      if (mems2015[j] == name) {
        Logger.log("Mem in 2015");
      } else if (mems2014[j] == name) {
        Logger.log("Mem in 2014");
      }
    }
  } 
}
EN

回答 1

Stack Overflow用户

发布于 2015-06-27 08:31:52

这就是我构建代码的方式。这个例子是不完整的。我没有尝试运行它。它的目的是展示程序如何流动的基本策略,以及如何处理数据。同样,代码也是不完整的。该代码确实有一种方法可以动态确定工作表中每年的开始列。它展示了如何将一个名字与该人的历史记录相关联。

代码语言:javascript
复制
var masterObject = {};
var ss = SpreadsheetApp.getActiveSpreadsheet();

function masterFunction() {
  initialPopulationOfMasterObject();
  processPastVolunteersSheet();
  processPastSponsersSheet();
  addDataToHistory();
};

function initialPopulationOfMasterObject() {
  var historySheet = ss.getSheetByName("History");
  var names = historySheet.getRange(2, 1, historySheet.getLastRow(), 1).getValues();
  var i=0;

  for (i=0;i<names.length;i+=1) {
    masterObject.thisPerson = names[i];
    masterObject.theirHistory = []; //array for list of this person's history
  };
};


function processPastVolunteersSheet() {
  var volunteersSheet = ss.getSheetByName("Past Volunteers");
  var numberOfYears = 3;
  var yrs = 0, thisYrsData=[], startColumn;
  var j=0, thisName="", thisYr="";

  for (yrs=0;yrs<numberOfYears;yrs+=1) {
    if (yrs=0) {
      startColumn = 1;
      thisYr = volunteersSheet.getRange(1, startColumn, 1,1).getValue();
    } else {
      startColumn = yrs*3;
      thisYr = volunteersSheet.getRange(1, startColumn, 1,1).getValue();
    };
    thisYrsData=volunteersSheet.getRange(2, startColumn, volunteersSheet.getLastRow(),2).getValues();
    for (j=0;j<thisYrsData;j+=1) {
      masterObject[thisName].push("Volunteer (" + thisYr);
    };
  };
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31083300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档