【发布时间】:2017-04-19 01:15:49
【问题描述】:
我正在用 Google 表格编写一个项目管理工具。我有一个项目模板,每次有人开始一个新项目时都会被复制和重命名。我在以下函数中遇到了一个非常特殊的错误。
首先,我为下面的格式道歉;不管我怎么尝试,我根本无法让中间的一行进入代码格式,所以代码被分成两半,中间有一行奇怪的行。我向您保证,这是在 Google Apps 中运行的全部功能。
错误发生在中断前的行中:“empArchive,getRange(archiveCurrRow, 1, 1, 6).setValues(masterListTop.getRange(i,1,1,6).getValues()) //归档项目”。当我在一个新文件中第一次运行它时,它停在这一行并显示一个错误,说“getRange”没有定义。我在前面的行中添加了一些调用,以检查 getRange 实际上是为 masterListTop 和 empArchive 定义的,并且这些调用工作正常。
我尝试注释掉有问题的行,因为以下行几乎相同,并且脚本运行良好。我取消了该行的注释,脚本再次运行良好。然而,每次我从这个模板创建一个新文件时,我都会收到这个错误。如果我注释掉然后取消注释问题行,它就会运行。显然,这不是一个实际的解决方法。有谁知道为什么会这样?
提前感谢您的帮助。
function onEdit(){
var projectSheet = SpreadsheetApp.getActive().getSheets()[0];
if((projectSheet.getRange(6,2).getValue()=="Completed")&&( projectSheet.getRange(9,9).getValue()!= "Completed")){ //find if project has been marked Completed
var empList = SpreadsheetApp.openById("XXXXXXXXXXX").getSheets()[0]; //open list of employees
var masterList = SpreadsheetApp.openById("XXXXXXXXXXX") //open the master list
var masterListTop = masterList.getSheets()[0]
var i = 2;
while(masterListTop.getRange(i,1).getValue() != projectSheet.getRange(1,2).getValue() && masterListTop.getRange(i,1).getValue() != "ZZZ"){ //find this project on the master list
var currValue = masterListTop.getRange(i,1).getValue()
i++
}
if(masterListTop.getRange(i,1).getValue() != "ZZZ" && masterListTop.getRange(i,11).getValue() == "No"){ //if the project has not been archived, do the following
var j = 2
while(empList.getRange(j,3).getValue() != projectSheet.getRange(2,2).getValue()){ //find the project owner on the employee list
j++
}
var empSheet = SpreadsheetApp.openByUrl(empList.getRange(j,5).getValue()) //open that employee's page
var empArchive = empSheet.getSheets()[2];
var empName = empArchive.getRange(1,1,1,1).getValue()
var archiveCurrRow = empArchive.getLastRow()+1
var projectName = masterListTop.getRange(i,1,1,1).getValue()
empArchive,getRange(archiveCurrRow, 1, 1, 6).setValues(masterListTop.getRange(i,1,1,6).getValues()) //archive the project
//above is the problem line
empArchive.getRange(archiveCurrRow,7,1,1).setValue(masterListTop.getRange(i,10,1,1).getValue())
masterListTop.getRange(i,11).setValue("Yes") //mark the project Archived
}
var m = 11
while(projectSheet.getRange(m,1).getValue() != ""){
if(projectSheet.getRange(m,9).getValue() == "No"){ //find unarchived tasks in this project
var n = 2
while(empList.getRange(n,3).getValue() != projectSheet.getRange(m,2).getValue()){ //find the task owner on the employee list
n++
}
empSheet = SpreadsheetApp.openByUrl(empList.getRange(n,5).getValue()) //open the task owner's page
var empTaskArchive = empSheet.getSheets()[3]
empTaskArchive.getRange(empTaskArchive.getLastRow()+1, 1, 1, 1).setValue(projectSheet.getRange(m,1).getValue()) //archive the task
empTaskArchive.getRange(empTaskArchive.getLastRow(), 2, 1, 4).setValues(projectSheet.getRange(m, 3, 1, 4).getValues())
empTaskArchive.getRange(empTaskArchive.getLastRow(), 6, 1, 1).setValue(masterListTop.getRange(i, 1).getValue())
empTaskArchive.getRange(empTaskArchive.getLastRow(), 7, 1, 1).setValue(projectSheet.getRange(7, 2).getValue())
empTaskArchive.getRange(empTaskArchive.getLastRow(), 8, 1, 1).setValue(masterListTop.getRange(i,10).getValue())
projectSheet.getRange(m,9).setValue("Yes") //mark the task Archived
}
m++
}
projectSheet.getRange(9,9).setValue("Completed")
}
}
【问题讨论】:
-
google-spreadsheet-api 与 Google Apps Script 的 SpreadsheetApp 服务不同。为了“修复”代码格式中未显示的行,使用降价,删除了缩进。您可以尝试的其他事情是使用
<code></code>。我认为应该在Meta Stack Overflow上报告这个格式问题。 -
关于主要问题,尝试使用最少的代码行重现问题。有关详细信息,请参阅minimal reproducible example。
-
不确定这是错误来源还是复制错误。但是这里有一个逗号
empArchive,getRange(archiveCurrRow, 1, 1, 6)应该是一个“。”在empArchive之后,就像empArchive.getRange(archiveCurrRow, 1, 1, 6) -
您可能需要考虑使用
append在文档中添加一行。 -
@JackBrown,那是错误!我不敢相信我没有看到它。我猜这就是单独工作的麻烦。有时你只需要第二双眼睛。感谢大家的帮助!
标签: google-apps-script google-sheets