Google Looper 的电子表格没有正确检查数组?
Google Spreadsheet for looper not checking array properly?
如果我在这里的代码中犯了一个非常基本的错误,我很抱歉(是的,我知道这是非常严重的 messy/long,我上个月才开始做这件事)。我的目标是将图像插入绑定到脚本的 sheet 上。当 运行 时,我的一名实验室技术人员或司机将能够登录或退出案例。共有三种可能的 sheet。教练,恩里克,或交付。当他们选择时,它会询问要查找的号码(即 GDL4256 或 L849)。一旦它在 "Enrique's" sheet 或 "Coach's" sheet 中找到数字,它将跳过所需的单元格以将案例记录为 "in lab" 或 "en-route",取决于按钮状态是 YES 还是 NO。 (首先在第 36 行看到,其中 c 可以是 "c+4" 或 "c+5")数组中的数据。我希望我能在这里找到问题,但我无法在调试器中找到它。有任何想法吗? (是的,我是一个平民,但我认为到目前为止我做得还不错....)
我已经省略了大约 9/10 的代码,因为其中大部分是重复的,而且我仍在寻找使其更小的方法,我只需要先了解更多有关此问题的信息。
function Enrique(){
stat = 0;
var ui = SpreadsheetApp.getUi();
var response = ui.alert('Case Entry', 'Is this case being logged into the lab?', ui.ButtonSet.YES_NO); //Must answer "Yes". Script will end otherwise.
if (response == ui.Button.YES) {
//User said yes, logging into the lab
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var cell = ss.getActiveCell();
var ui = SpreadsheetApp.getUi();
//Getting case number, not case sensitive
var response = ui.prompt('Case Entry', 'What is the case number?', ui.ButtonSet.OK);
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetNumber = sheets.length;
var currentSheet = ss.getIndex();//-1
//Make array
Logger.log(currentSheet);
SpreadsheetApp.setActiveSheet(sheets[currentSheet]);
cell = sheets[currentSheet].getRange(1,1);
var activeR = cell.getRow()-1;
var activeC = cell.getColumn()-1;
var data = sheets[currentSheet].getDataRange().getValues();
var step = 0;
//loop through data on sheet
var r = activeR;
var c = activeC;
var d = data[0].length;
for(;r<d;++r){
for(;c<d;++c){
step++;
Logger.log('sheet : '+currentSheet+' step:'+step+' response.getResponseText() '+response.getResponseText()+' = '+data[r][c]);
if(data[r][c]==''||(step==1&¤tSheet==currentSheet)){ continue };
if(response.getResponseText().toString().toLowerCase()==data[r][c].toString().toLowerCase()){
sheets[currentSheet].getRange(r+1,c+4).activate().setValue("Yes").setBackgroundRGB(0,255,0);
Browser.msgBox("The case has been logged into the lab on the sheet 'Enrique'");
stat = 1;
return
}
}
}
if(stat === 0)
{
Browser.msgBox("The code failed somewhere...");
}
}
}
好吧,由于没有人能够帮助我(谢谢),我已经四处寻找了很多。
我终于到达了我在课程中需要的部分,以便将我需要的信息更可靠地传递到活套中。这是我使用的代码,因为我知道其他人也会遇到与我相同的问题。有需要的欢迎转载我
function Search(){
var ui = SpreadsheetApp.getUi();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var response = ui.alert('Case Entry', 'Is this case being logged into the lab?', ui.ButtonSet.YES_NO);
if (response == ui.Button.YES) {
var response = ui.prompt('Case Entry', 'What is the case number?', ui.ButtonSet.OK);
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
//The 0 arguement in the function calls below is just a placeholder.
//I was originally using it for one bit to be called by "a" in the looper function
if(looper(0, response, "Enrique", 5, jumpToEnr(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Coach", 5, jumpToCoach(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Delivered", 2, jumpToDel(), "The case has been found in the sheet ", "#ffff00") == 1){return}
}
if (response == ui.Button.NO) {
var response = ui.prompt('Case Entry', 'What is the case number?', ui.ButtonSet.OK);
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
if(looper(0, response, "Enrique", 6, jumpToEnr(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Coach", 6, jumpToCoach(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Delivered", 2, jumpToDel(), "The case has been found in the sheet ", "#ffff00") == 1){return}
}
Browser.msgBox("sorry, it seems like something went wrong...");
}
function looper(a, b, c, d, e, f, g){
e;
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
for(n=0;n<values.length;++n){
var cell = values[n][1];
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if(b.getResponseText() == cell){sheet.getRange(n+1,d).activate().setBackground("#00ff00").setValue("Yes"); Browser.msgBox(f+c); return 1;}
}
}
function DelSearch(){
var response = ui.prompt('Case Search', 'What is the case number?', ui.ButtonSet.OK);
looper(0,response, "Delivered", 2, jumptoDel(),"I found the case in the sheet ", "#ffff00");
}
function formSubmit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
jumpToForm2();
if(ss.getSheetByName("Form Responses 2").getRange(2,5).getValue() == "Enrique"){copyRow("Form Responses 2","Enrique");}
}
function jumpToCoach() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Coach');
Logger.log(sheet.getName());
SpreadsheetApp.setActiveSheet(sheet);
sheet.getRange('A1').activate();
}
function jumpToEnr() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Enrique');
Logger.log(sheet.getName());
SpreadsheetApp.setActiveSheet(sheet);
sheet.getRange('A1').activate();
}
function jumpToDel() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Delivered');
Logger.log(sheet.getName());
SpreadsheetApp.setActiveSheet(sheet);
sheet.getRange('A1').activate();
}
如果我在这里的代码中犯了一个非常基本的错误,我很抱歉(是的,我知道这是非常严重的 messy/long,我上个月才开始做这件事)。我的目标是将图像插入绑定到脚本的 sheet 上。当 运行 时,我的一名实验室技术人员或司机将能够登录或退出案例。共有三种可能的 sheet。教练,恩里克,或交付。当他们选择时,它会询问要查找的号码(即 GDL4256 或 L849)。一旦它在 "Enrique's" sheet 或 "Coach's" sheet 中找到数字,它将跳过所需的单元格以将案例记录为 "in lab" 或 "en-route",取决于按钮状态是 YES 还是 NO。 (首先在第 36 行看到,其中 c 可以是 "c+4" 或 "c+5")数组中的数据。我希望我能在这里找到问题,但我无法在调试器中找到它。有任何想法吗? (是的,我是一个平民,但我认为到目前为止我做得还不错....)
我已经省略了大约 9/10 的代码,因为其中大部分是重复的,而且我仍在寻找使其更小的方法,我只需要先了解更多有关此问题的信息。
function Enrique(){
stat = 0;
var ui = SpreadsheetApp.getUi();
var response = ui.alert('Case Entry', 'Is this case being logged into the lab?', ui.ButtonSet.YES_NO); //Must answer "Yes". Script will end otherwise.
if (response == ui.Button.YES) {
//User said yes, logging into the lab
var sh = SpreadsheetApp.getActiveSpreadsheet();
var ss = sh.getActiveSheet();
var cell = ss.getActiveCell();
var ui = SpreadsheetApp.getUi();
//Getting case number, not case sensitive
var response = ui.prompt('Case Entry', 'What is the case number?', ui.ButtonSet.OK);
var sheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();
var sheetNumber = sheets.length;
var currentSheet = ss.getIndex();//-1
//Make array
Logger.log(currentSheet);
SpreadsheetApp.setActiveSheet(sheets[currentSheet]);
cell = sheets[currentSheet].getRange(1,1);
var activeR = cell.getRow()-1;
var activeC = cell.getColumn()-1;
var data = sheets[currentSheet].getDataRange().getValues();
var step = 0;
//loop through data on sheet
var r = activeR;
var c = activeC;
var d = data[0].length;
for(;r<d;++r){
for(;c<d;++c){
step++;
Logger.log('sheet : '+currentSheet+' step:'+step+' response.getResponseText() '+response.getResponseText()+' = '+data[r][c]);
if(data[r][c]==''||(step==1&¤tSheet==currentSheet)){ continue };
if(response.getResponseText().toString().toLowerCase()==data[r][c].toString().toLowerCase()){
sheets[currentSheet].getRange(r+1,c+4).activate().setValue("Yes").setBackgroundRGB(0,255,0);
Browser.msgBox("The case has been logged into the lab on the sheet 'Enrique'");
stat = 1;
return
}
}
}
if(stat === 0)
{
Browser.msgBox("The code failed somewhere...");
}
}
}
好吧,由于没有人能够帮助我(谢谢),我已经四处寻找了很多。 我终于到达了我在课程中需要的部分,以便将我需要的信息更可靠地传递到活套中。这是我使用的代码,因为我知道其他人也会遇到与我相同的问题。有需要的欢迎转载我
function Search(){
var ui = SpreadsheetApp.getUi();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var response = ui.alert('Case Entry', 'Is this case being logged into the lab?', ui.ButtonSet.YES_NO);
if (response == ui.Button.YES) {
var response = ui.prompt('Case Entry', 'What is the case number?', ui.ButtonSet.OK);
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
//The 0 arguement in the function calls below is just a placeholder.
//I was originally using it for one bit to be called by "a" in the looper function
if(looper(0, response, "Enrique", 5, jumpToEnr(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Coach", 5, jumpToCoach(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Delivered", 2, jumpToDel(), "The case has been found in the sheet ", "#ffff00") == 1){return}
}
if (response == ui.Button.NO) {
var response = ui.prompt('Case Entry', 'What is the case number?', ui.ButtonSet.OK);
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
if(looper(0, response, "Enrique", 6, jumpToEnr(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Coach", 6, jumpToCoach(), "The case has been logged in under the sheet ", "#00ff00") == 1){return}
if(looper(0, response, "Delivered", 2, jumpToDel(), "The case has been found in the sheet ", "#ffff00") == 1){return}
}
Browser.msgBox("sorry, it seems like something went wrong...");
}
function looper(a, b, c, d, e, f, g){
e;
var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();
for(n=0;n<values.length;++n){
var cell = values[n][1];
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
if(b.getResponseText() == cell){sheet.getRange(n+1,d).activate().setBackground("#00ff00").setValue("Yes"); Browser.msgBox(f+c); return 1;}
}
}
function DelSearch(){
var response = ui.prompt('Case Search', 'What is the case number?', ui.ButtonSet.OK);
looper(0,response, "Delivered", 2, jumptoDel(),"I found the case in the sheet ", "#ffff00");
}
function formSubmit(){
var ss = SpreadsheetApp.getActiveSpreadsheet();
jumpToForm2();
if(ss.getSheetByName("Form Responses 2").getRange(2,5).getValue() == "Enrique"){copyRow("Form Responses 2","Enrique");}
}
function jumpToCoach() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Coach');
Logger.log(sheet.getName());
SpreadsheetApp.setActiveSheet(sheet);
sheet.getRange('A1').activate();
}
function jumpToEnr() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Enrique');
Logger.log(sheet.getName());
SpreadsheetApp.setActiveSheet(sheet);
sheet.getRange('A1').activate();
}
function jumpToDel() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Delivered');
Logger.log(sheet.getName());
SpreadsheetApp.setActiveSheet(sheet);
sheet.getRange('A1').activate();
}