Google Apps脚本-for循环的麻烦(再次)

詹森010

我已经在Google表格中从事这个副项目了一段时间了。复制链接)有效时,它将在“各个工作表”(米兰达,派珀,洛斯和金)的第I列(是或否)中使用一个条件参数,并将电子邮件发送到以下地址的B列和Q列:通过运行函数末尾的switch语句返回的母版表以及返回的任何电子邮件。通过我在本网站上获得的建议,我能够极大地改善代码,对此我深表感谢!这是我最近的障碍-

代码: 完整的内容已经在JSFiddle上了

 for (var ii = 0; ii < holdingData.masterStudNames.length; ii++) {
        if (holdingData.masterStudNames[ii] === holdingData.selectedStudName) {
            //Push Master column B to holdingData
            holdingData.selectedTeacherEmail = holdingData.masterTeacherEmail[ii].toLowerCase();
            //Push Master Column Q for selected student to holdingData
            holdingData.selectedIEP = holdingData.allIEPContents[ii].toLowerCase();
        }
    }
    for (var j = 0; j < holdingData.selectedIEP.length; j++) {
       switch (holdingData.masterIEP[j]) {
           case "dreier": holdingData.selectedIEPEmail = "[email protected]"; break;
           case "forbes": holdingData.selectedIEPEmail = "[email protected]"; break;
           case "green": holdingData.selectedIEPEmail = "[email protected]"; break;
           case "marlo": holdingData.selectedIEPEmail = "[email protected]"; break;
           case "mcDonald": holdingData.selectedIEPEmail = "[email protected]"; break;
           case "nakkour": holdingData.selectedIEPEmail = "[email protected]"; break;
           case "wright": holdingData.selectedIEPEmail = "[email protected]"; break;
           default: break;
       } 
    } 

问题:查看通过holdData.selectedIEP [JSFiddle中的第79行]的for循环。我相信它可能会错误地使用[j]计数器,或者其他循环之一正在阻碍您的前进。我承认,在一个函数中有3个for循环对我来说似乎太多了,但我想不出另一种方法来做到这一点。有什么明显的我想念的东西吗?

我已经将代码缩减了很多。因此,我完全意识到,可能还有更多改进的余地(我仍在学习:)如果您有任何建议,我很想听听他们的建议!

更新:通过使用调试器,我发现的问题之一是我的for循环仅提取所选列中的最后一个值。例如,在第一个循环中:

for (var h = 0; h < dataMaster.length; h++) { 
  //Push all student first names from master sheet for later use
  var masterStudFirstName = masterSheetDataLooped[h][4];
}

这会将masterStudentFirstName设置为“ test”,这是第四列中的最后一个单元格。我需要获取该列中的所有值,并将它们存储在一个数组中,以备后用。

我觉得我在这里错过了一些简单的事情... :)

詹森010

经过一些故障排除后,再看一下Karl_S建议的调试器(谢谢!),我现在对我遇到的问题进行了细化,并解决了。

我的代码的问题是,for循环未提取正确的数据。我在此工作表上有4个标签,每个标签都包含一些我需要提取的数据。在第一种情况下(“主”选项卡),我需要提取列E“学生的名字”的值,并将其存储在主“ holdingData”对象内的数组对象中。

我以前的方法是遍历该列:

for (var h = 0; h < dataMaster.length; h++) { 
  //Push all student first names from master sheet for later use
  var masterStudFirstName = masterSheetDataLooped[h][4];
}

但是我发现,尽管这很有用,但需要我编写条件才能使代码的其他部分正常工作。所以我最终要做的是这个(为上下文添加更多变量):

//Set a new object to hold data
var holdingData = new Object();
holdingData.studFirstNames = [];
holdingData.allSheetsNamesAndIds = [[sheets[1], sheets[1].getSheetName(),
543328548], [sheets[3], sheets[3].getSheetName(), 1377446903], [sheets[4], 
sheets[4].getSheetName(), 748028814], [sheets[5], sheets[5].getSheetName(), 
431951580], [sheets[6], sheets[6].getSheetName(), 193755985]];

//Skippng a few lines....

//Load the master sheet, get its entire range, and then get all values
SpreadsheetApp.setActiveSheet(holdingData.allSheetsNamesAndIds[0][0]);
var numRowsMaster = masterSheet.getLastRow();
var dataRangeMaster = masterSheet.getRange(2, 1, numRowsMaster - 1, 26);
var dataMaster = dataRangeMaster.getValues();

//Loop dataMaster and pull the relevant columns
for (var h = 0; h < dataMaster.length; ++h) {
  holdingData.studFirstNames.push(dataMaster[h][4]);
}

基本上,这会遍历“主”选项卡的每一行。然后,每次到达第4列时,我们会将特定行中该列的内容推送到holdingData数组。

总结起来,循环是说“逐行遍历dataMaster”。那么我们说:“您遍历的每一行将该行中第四列的内容推送到holdingData.studFirstNames”

对于数据的存储方式(变量),当然可以采用不同的方法。对于此应用程序,将数据从楼上传递给保持的对象比较容易。我意识到我主要是在向自己解释:),但我希望将来有人能看到这篇文章,并找到比我更快的答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

简单的 For 循环 Google Apps 脚本

来自分类Dev

在Google Apps脚本中循环数组

来自分类Dev

Google表格+ Apps脚本:更快然后循环

来自分类Dev

优化Google Apps脚本中的for循环功能(也许使用数组)?

来自分类Dev

Google表格+ Apps脚本:通过ID循环移动文件

来自分类Dev

循环使用Google Apps脚本中的重置功能

来自分类Dev

在FolderIterator和FileIterator上循环-Google Apps脚本

来自分类Dev

google apps脚本日历授权必填循环

来自分类Dev

通过 For 循环比较 Google Apps 脚本中的日期

来自分类Dev

调用Google Apps脚本

来自分类Dev

Google Apps脚本要求

来自分类Dev

Google Apps脚本makeCopy

来自分类Dev

Google Apps脚本:onEdit

来自分类Dev

调用Google Apps脚本

来自分类Dev

Google Apps脚本:比较日期

来自分类Dev

删除google-apps脚本

来自分类Dev

Google Apps脚本的授权错误

来自分类Dev

Google Apps脚本上的附件

来自分类Dev

Google Form + Apps脚本onEdit

来自分类Dev

从Google Apps脚本启动下载

来自分类Dev

Google Apps脚本错误值

来自分类Dev

删除google-apps脚本

来自分类Dev

Firebase 与 Google Apps 脚本的通信

来自分类Dev

Google Apps脚本的Java脚本优化

来自分类Dev

Google Apps脚本-单元格中的.setValue基于for循环匹配

来自分类Dev

Google Apps脚本循环获取单元格值并将其插入公式

来自分类Dev

Google Apps脚本函数可在forEach循环中复制并粘贴先前的i值

来自分类Dev

如何在Google Apps脚本的if循环中使用部分匹配

来自分类Dev

MySQL 查询错误“非法小时值”导致 Google Apps 脚本中出现循环和写入问题