2016-09-06 76 views
0

我遇到下面的GAS代码问题。目的是遍历所有可用的表单并创建我需要制作易于编辑的表单的下拉框/验证规则。Google Apps脚本表循环问题

主要问题是,代码只在每张纸上运行一次,并且它不会将其自身应用于除活动纸张之外的任何其他纸张;即。它不会循环到下一个可用表单。

function FailureSauce() { 
    var ss = SpreadsheetApp.getActive(); 
    for(var n in ss.getSheets()) { // loop over all tabs in the spreadsheet 
    var sheet = ss.getSheets()[n]; // look at every sheet in spreadsheet 
    var option = new Array(); 
    option[0]="☐"; 
    option[1]="☑"; 
    //var dv = sheet.getRange(myRange.getRow(),myRange.getColumn()+1).getValidation(); 
    var dv = SpreadsheetApp.getActiveSheet().getRange(SpreadsheetApp.getActiveRange().getRow(),SpreadsheetApp.getActiveRange().getColumn()).getDataValidation(); 
    var dv = SpreadsheetApp.newDataValidation(); 
    //dv.setAllowInvalidData(false); 
    dv.setAllowInvalid(false); 
    dv.setHelpText("Please choose of the options given in the drop down box"); 
    dv.requireValueInList(option, true); 

     for (var i = 9; i <= SpreadsheetApp.getActiveSpreadsheet().getLastRow(); i++) { 
     for (var y = 1; y < 4; y++) { 
      SpreadsheetApp.getActiveSheet().getRange(i,y).setFontFamily("Arial") 
      SpreadsheetApp.getActiveSheet().getRange(i,y).setFontSize(10) 

      if (SpreadsheetApp.getActiveSheet().getRange(i,y).isBlank()) { 
      //SpreadsheetApp.getActiveSheet().getRange(i,y).setValue('=if(A2=1,image("http://i.stack.imgur.com/GChKZ.jpg"),image("http://i.stack.imgur.com/yQalm.jpg"))'); 
      //sheet.getRange(SpreadsheetApp.getActiveSheet().getRow(),SpreadsheetApp.getActiveSheet().getColumn()).setDataValidation(dv.build()); 
      SpreadsheetApp.getActiveSheet().getRange(i,y).setDataValidation(dv.build()); 
      } 
      if (SpreadsheetApp.getActiveSheet().getRange(i,y).getValues() == "a") { 
      //SpreadsheetApp.getActiveSheet().getRange(i,y).setValue('=image("http://i.stack.imgur.com/GChKZ.jpg")'); 
      SpreadsheetApp.getActiveSheet().getRange(i,y).setDataValidation(dv.build()); 
      SpreadsheetApp.getActiveSheet().getRange(i,y).setValue("☑") 
      } 
     } 
     } 
    } 
    } 
+1

如果您不熟悉故障排除工具,花5分钟阅读[链接Google Apps脚本故障排除指南(https://developers.google.com/apps-script/troubleshooting) –

+0

您使用' SpreadsheetApp.getActiveSpreadsheet()'一遍又一遍,也许你的意思是使用'getActiveSheet()'? –

回答

0

你或许应该与你的变量替换sheetSpreadsheetApp.getActiveSheet()

function FailureSauce() { 
    var dv,option,ss,sheet; 

    ss = SpreadsheetApp.getActiveSpreadsheet(); 

    for(var n in ss.getSheets()){// loop over all tabs in the spreadsheet 
    sheet = ss.getSheets()[n];// look at every sheet in spreadsheet 
    Logger.log('name: ' + sheet.getName()); 

    option = new Array(); 
    option[0]="☐"; 
    option[1]="☑"; 

    // var dv = sheet.getRange(myRange.getRow(),myRange.getColumn()+1).getValidation(); 
    dv = sheet.getRange(SpreadsheetApp.getActiveRange().getRow(),SpreadsheetApp.getActiveRange().getColumn()).getDataValidation(); 

    dv = SpreadsheetApp.newDataValidation(); 
    // dv.setAllowInvalidData(false); 
    dv.setAllowInvalid(false); 
    dv.setHelpText("Please choose of the options given in the drop down box"); 
    dv.requireValueInList(option, true); 


    for (var i = 9; i <= SpreadsheetApp.getActiveSpreadsheet().getLastRow(); i++) { 
     for (var y = 1; y < 4; y++) { 
     sheet.getRange(i,y).setFontFamily("Arial") 
     sheet.getRange(i,y).setFontSize(10) 

     if (sheet.getRange(i,y).isBlank()){ 
      // sheet.getRange(i,y).setValue('=if(A2=1,image("http://i.stack.imgur.com/GChKZ.jpg"),image("http://i.stack.imgur.com/yQalm.jpg"))'); 
      // sheet.getRange(sheet.getRow(),sheet.getColumn()).setDataValidation(dv.build()); 
      sheet.getRange(i,y).setDataValidation(dv.build()); 
     } 
     if (sheet.getRange(i,y).getValues() == "a"){ 
      // sheet.getRange(i,y).setValue('=image("http://i.stack.imgur.com/GChKZ.jpg")'); 
      sheet.getRange(i,y).setDataValidation(dv.build()); 
      sheet.getRange(i,y).setValue("☑") 
     } 


     } 
    } 
    } 
} 
+0

谢谢!你已经解决了我的缺点,我会通过你的代码学习。祝你有个美好的一天Sandy“Too”Good :) – bill