For 循环没有在我的 google 脚本中启动?
For loop not launching in my google script?
我有一个 Google 表格,它接受对我们图书馆馆藏的新项目的请求。 spreadsheet 有一个脚本,可以根据项目的类型为将要处理它们的四个人在四个 sheet 之间复制数据。
这些人希望能够在他们各自的 sheet 中编辑具有每个项目状态(待定、不可用、已接收等)的列,并自动使编辑状态更新接收表单提交的原始 sheet。
这是我卡住的部分(我在脚本中也做了标记)。我想出的逻辑是每个表单提交都有一个时间戳,所以在每次编辑时,它应该 运行 一个循环,将编辑后的时间戳 sheet 与原始提交上的时间戳相匹配sheet 并从那里将编辑复制到主要提交 sheet。我不知道我在做什么,只是输入了我认为有意义的内容,但是当我 运行 它时,它甚至没有启动 for 循环。
Link 到表格副本:(已删除)
Link 到 Spreadsheet 的可编辑副本:(已删除)
function onFormSubmit() {//Distributes Form Submissions to the appropriate sheets
//depending on format and audience whenever new submission is made
var ss = SpreadsheetApp.getActiveSpreadsheet();
var responseSheet = ss.getSheetByName("Item Request"); //points to form response sheet
var lastSub = responseSheet.getLastRow(); //retreives last row (assumed last submission)
//the following point to the cells within the last submission row
var tsCell = responseSheet.getRange(lastSub,1);
var lnCell = responseSheet.getRange(lastSub,2);
var fnCell = responseSheet.getRange(lastSub,3);
var lCardCell = responseSheet.getRange(lastSub,4);
var phoneCell = responseSheet.getRange(lastSub,5);
var audienceCell = responseSheet.getRange(lastSub,6);
var formatCell = responseSheet.getRange(lastSub,7);
var genreCell = responseSheet.getRange(lastSub,8);
var titleCell = responseSheet.getRange(lastSub,9);
var authorCell = responseSheet.getRange(lastSub,10);
var isbnCell = responseSheet.getRange(lastSub,11);
var pubCell = responseSheet.getRange(lastSub,12);
var staffCell = responseSheet.getRange(lastSub,13);
var notesCell = responseSheet.getRange(lastSub,14);
//the following retreive values from those cells
var tsVal = tsCell.getValue();
var lnVal = lnCell.getValue();
var fnVal = fnCell.getValue();
var lCardVal = lCardCell.getValue();
var phoneVal = phoneCell.getValue();
var audienceVal = audienceCell.getValue();
var formatVal = formatCell.getValue();
var genreVal = genreCell.getValue();
var titleVal = titleCell.getValue();
var authorVal = authorCell.getValue();
var isbnVal = isbnCell.getValue();
var pubVal = pubCell.getValue();
var staffVal = staffCell.getValue();
var notesVal = notesCell.getValue();
//the following if statement determines which sheet the response values will be copied to
if (audienceVal == "Spanish" || formatVal == "e-Book" || formatVal == "e-Audio") {
var selector = "Person 1";
targetSheet = ss.getSheetByName(selector);
}
else if (audienceVal == "Juvenile" ) {
var selector = "Person 2";
targetSheet = ss.getSheetByName(selector);
}
else if (audienceVal == "Young Adult" ) {
var selector = "Person 3";
targetSheet = ss.getSheetByName(selector);
}
else {
var selector = "Person 4";
targetSheet = ss.getSheetByName(selector);
}//end if
targetSheet.appendRow([tsVal,lnVal,fnVal,lCardVal,phoneVal,audienceVal,formatVal,genreVal,titleVal,authorVal,isbnVal,pubVal,staffVal,notesVal]);
var selectorCell = responseSheet.getRange(lastSub,15);
selectorCell.setValue(selector);
}//end onFormSubmit
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actSheet = ss.getActiveSheet();
var responseSheet = ss.getSheetByName("Item Request");
var actCell = actSheet.getActiveCell();
var actVal = actCell.getValue();
var actLoc = actCell.getA1Notation();
var last = actSheet.getLastRow();
var respLast = responseSheet.getLastRow();
var dataA = actSheet.getRange(1,1,respLast,1); //compiles an array of data found in column A through last row in response sheet
var dataO = actSheet.getRange(1,1,last,15); //compiles an array of data found in column O through last row in active sheet
var dataP = actSheet.getRange(1,1,last,16); //compiles an array of data found in column P through last row in active sheet
var tstamp1 = actSheet.getRange(actCell.getRow(),1);
var tsVal1 = tstamp1.getValue();
//=============****THIS IS WHERE I'M STUCK****================
for (i=0;i<dataO.length;++i){
if (dataO[i][0] == actCell) { //checks the array to see if the edit was made to the "O" column
//----------(checking for timestamp match and copying entry)----------------------
for (i=0;i<dataA.length;++i){
if (dataA[i][0] == tsVal1){
var tstamp2 = responseSheet.getRange(dataA[i][0]);
var toEdit = responseSheet.getRange(tstamp2.getRow(),16);
toEdit.setValue(actVal);
}
}
}
else { //if edit was not made in col "O,"checks if edit was in "P" column
for (i=0;i<dataP.length;++i){
if (dataP[i][0] == actCell) {// checks the array to see if the edit was made in the "P" column
//------------(checking for timestamp match and copying entry)----------------------
for (i=0;i<dataA.length;++i){
if (dataA[i][0] == tsVal1){
var tstamp2 = responseSheet.getRange(dataA[i][0]);
var toEdit = responseSheet.getRange(tstamp2.getRow(),17);
toEdit.setValue(actVal);
}
}
}
else {return;}
}
}
}
}
我修改了你的onEdit函数。现在它将更新状态以响应 sheet.
function onEdit() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actSheet = ss.getActiveSheet();
var responseSheet = ss.getSheetByName("Item Request");
var actCell = actSheet.getActiveCell();
var actVal = actCell.getValue();
var actLoc = actCell.getA1Notation();
var last = actSheet.getLastRow();
var respLast = responseSheet.getLastRow();
var dataA = responseSheet.getRange(1, 1, respLast, 1).getValues(); //compiles an array of data found in column A through last row in response sheet
var dataO = actSheet.getRange(1, 1, last, 15).getValues(); //compiles an array of data found in column O through last row in active sheet
var dataP = actSheet.getRange(1, 1, last, 16).getValues(); //compiles an array of data found in column P through last row in active sheet
var tstamp1 = actSheet.getRange(actCell.getRow(), 1);
var tsVal1 = tstamp1.getValue();
//===============**** THIS IS WHERE I'M STUCK ****===============================
for (i = 0; i < dataO.length; ++i) {
if (actCell.getColumn() == 15) { //checks the array to see if the edit was made to the "O" column
//----------(checking for timestamp match and copying entry)----------------------
for (k = 1; k < dataA.length; k++) {
if (dataA[k][0].toString() == tsVal1.toString()) {
var toEdit = responseSheet.getRange(k + 1, 16);
toEdit.setValue(actVal);
}
}
} else { //if edit was not made in col "O,"checks if edit was in "P" column
for (i = 0; i < dataP.length; ++i) {
if (actCell.getColumn() == 16) { // checks the array to see if the edit was made in the "P" column
//------------(checking for timestamp match and copying entry)----------------------
for (k = 1; k < dataA.length; k++) {
if (dataA[k][0].toString() == tsVal1.toString()) {
var toEdit = responseSheet.getRange(k + 1, 17);
toEdit.setValue(actVal);
}
}
} else {
return;
}
}
}
}
} catch (e) {
Logger.log(e)
}
}
我有一个 Google 表格,它接受对我们图书馆馆藏的新项目的请求。 spreadsheet 有一个脚本,可以根据项目的类型为将要处理它们的四个人在四个 sheet 之间复制数据。
这些人希望能够在他们各自的 sheet 中编辑具有每个项目状态(待定、不可用、已接收等)的列,并自动使编辑状态更新接收表单提交的原始 sheet。
这是我卡住的部分(我在脚本中也做了标记)。我想出的逻辑是每个表单提交都有一个时间戳,所以在每次编辑时,它应该 运行 一个循环,将编辑后的时间戳 sheet 与原始提交上的时间戳相匹配sheet 并从那里将编辑复制到主要提交 sheet。我不知道我在做什么,只是输入了我认为有意义的内容,但是当我 运行 它时,它甚至没有启动 for 循环。
Link 到表格副本:(已删除)
Link 到 Spreadsheet 的可编辑副本:(已删除)
function onFormSubmit() {//Distributes Form Submissions to the appropriate sheets
//depending on format and audience whenever new submission is made
var ss = SpreadsheetApp.getActiveSpreadsheet();
var responseSheet = ss.getSheetByName("Item Request"); //points to form response sheet
var lastSub = responseSheet.getLastRow(); //retreives last row (assumed last submission)
//the following point to the cells within the last submission row
var tsCell = responseSheet.getRange(lastSub,1);
var lnCell = responseSheet.getRange(lastSub,2);
var fnCell = responseSheet.getRange(lastSub,3);
var lCardCell = responseSheet.getRange(lastSub,4);
var phoneCell = responseSheet.getRange(lastSub,5);
var audienceCell = responseSheet.getRange(lastSub,6);
var formatCell = responseSheet.getRange(lastSub,7);
var genreCell = responseSheet.getRange(lastSub,8);
var titleCell = responseSheet.getRange(lastSub,9);
var authorCell = responseSheet.getRange(lastSub,10);
var isbnCell = responseSheet.getRange(lastSub,11);
var pubCell = responseSheet.getRange(lastSub,12);
var staffCell = responseSheet.getRange(lastSub,13);
var notesCell = responseSheet.getRange(lastSub,14);
//the following retreive values from those cells
var tsVal = tsCell.getValue();
var lnVal = lnCell.getValue();
var fnVal = fnCell.getValue();
var lCardVal = lCardCell.getValue();
var phoneVal = phoneCell.getValue();
var audienceVal = audienceCell.getValue();
var formatVal = formatCell.getValue();
var genreVal = genreCell.getValue();
var titleVal = titleCell.getValue();
var authorVal = authorCell.getValue();
var isbnVal = isbnCell.getValue();
var pubVal = pubCell.getValue();
var staffVal = staffCell.getValue();
var notesVal = notesCell.getValue();
//the following if statement determines which sheet the response values will be copied to
if (audienceVal == "Spanish" || formatVal == "e-Book" || formatVal == "e-Audio") {
var selector = "Person 1";
targetSheet = ss.getSheetByName(selector);
}
else if (audienceVal == "Juvenile" ) {
var selector = "Person 2";
targetSheet = ss.getSheetByName(selector);
}
else if (audienceVal == "Young Adult" ) {
var selector = "Person 3";
targetSheet = ss.getSheetByName(selector);
}
else {
var selector = "Person 4";
targetSheet = ss.getSheetByName(selector);
}//end if
targetSheet.appendRow([tsVal,lnVal,fnVal,lCardVal,phoneVal,audienceVal,formatVal,genreVal,titleVal,authorVal,isbnVal,pubVal,staffVal,notesVal]);
var selectorCell = responseSheet.getRange(lastSub,15);
selectorCell.setValue(selector);
}//end onFormSubmit
function onEdit() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actSheet = ss.getActiveSheet();
var responseSheet = ss.getSheetByName("Item Request");
var actCell = actSheet.getActiveCell();
var actVal = actCell.getValue();
var actLoc = actCell.getA1Notation();
var last = actSheet.getLastRow();
var respLast = responseSheet.getLastRow();
var dataA = actSheet.getRange(1,1,respLast,1); //compiles an array of data found in column A through last row in response sheet
var dataO = actSheet.getRange(1,1,last,15); //compiles an array of data found in column O through last row in active sheet
var dataP = actSheet.getRange(1,1,last,16); //compiles an array of data found in column P through last row in active sheet
var tstamp1 = actSheet.getRange(actCell.getRow(),1);
var tsVal1 = tstamp1.getValue();
//=============****THIS IS WHERE I'M STUCK****================
for (i=0;i<dataO.length;++i){
if (dataO[i][0] == actCell) { //checks the array to see if the edit was made to the "O" column
//----------(checking for timestamp match and copying entry)----------------------
for (i=0;i<dataA.length;++i){
if (dataA[i][0] == tsVal1){
var tstamp2 = responseSheet.getRange(dataA[i][0]);
var toEdit = responseSheet.getRange(tstamp2.getRow(),16);
toEdit.setValue(actVal);
}
}
}
else { //if edit was not made in col "O,"checks if edit was in "P" column
for (i=0;i<dataP.length;++i){
if (dataP[i][0] == actCell) {// checks the array to see if the edit was made in the "P" column
//------------(checking for timestamp match and copying entry)----------------------
for (i=0;i<dataA.length;++i){
if (dataA[i][0] == tsVal1){
var tstamp2 = responseSheet.getRange(dataA[i][0]);
var toEdit = responseSheet.getRange(tstamp2.getRow(),17);
toEdit.setValue(actVal);
}
}
}
else {return;}
}
}
}
}
我修改了你的onEdit函数。现在它将更新状态以响应 sheet.
function onEdit() {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var actSheet = ss.getActiveSheet();
var responseSheet = ss.getSheetByName("Item Request");
var actCell = actSheet.getActiveCell();
var actVal = actCell.getValue();
var actLoc = actCell.getA1Notation();
var last = actSheet.getLastRow();
var respLast = responseSheet.getLastRow();
var dataA = responseSheet.getRange(1, 1, respLast, 1).getValues(); //compiles an array of data found in column A through last row in response sheet
var dataO = actSheet.getRange(1, 1, last, 15).getValues(); //compiles an array of data found in column O through last row in active sheet
var dataP = actSheet.getRange(1, 1, last, 16).getValues(); //compiles an array of data found in column P through last row in active sheet
var tstamp1 = actSheet.getRange(actCell.getRow(), 1);
var tsVal1 = tstamp1.getValue();
//===============**** THIS IS WHERE I'M STUCK ****===============================
for (i = 0; i < dataO.length; ++i) {
if (actCell.getColumn() == 15) { //checks the array to see if the edit was made to the "O" column
//----------(checking for timestamp match and copying entry)----------------------
for (k = 1; k < dataA.length; k++) {
if (dataA[k][0].toString() == tsVal1.toString()) {
var toEdit = responseSheet.getRange(k + 1, 16);
toEdit.setValue(actVal);
}
}
} else { //if edit was not made in col "O,"checks if edit was in "P" column
for (i = 0; i < dataP.length; ++i) {
if (actCell.getColumn() == 16) { // checks the array to see if the edit was made in the "P" column
//------------(checking for timestamp match and copying entry)----------------------
for (k = 1; k < dataA.length; k++) {
if (dataA[k][0].toString() == tsVal1.toString()) {
var toEdit = responseSheet.getRange(k + 1, 17);
toEdit.setValue(actVal);
}
}
} else {
return;
}
}
}
}
} catch (e) {
Logger.log(e)
}
}