Google表格会激活循环中的单元格

时间:2018-05-31 23:24:39

标签: javascript loops google-apps-script google-sheets

我有一个可以满足我想要的循环,但是我想在每个工作表中设置一个活动单元格,这样我每次循环时都不必单击它。

我尝试了两种似乎有意义的方法,但它们都只适用于循环中的最后一张: -

function setDraft() {

//msg box to confirm relevant sheets are hidden, thus excluded from code
  var response = Browser.msgBox("SET AS DRAFT","Have you hidden sheets you don't want marked as draft?", Browser.Buttons.YES_NO);
  if(response=="no")
    return;
  else if(response=="cancel")
    return;
  else

//loop and code for Visible sheets  
  var ss = SpreadsheetApp.getActive();
  var allsheets = ss.getSheets();

  for (var s in allsheets){
  var sheet=allsheets[s]
  var date = sheet.getRange('I1')

  if (sheet.isSheetHidden()!= true) {   
//sheet.setActiveRange(date);
  sheet.setActiveSelection(date);
  sheet.getRange('I5').setValue('DRAFT');
       }    
    }
}

任何人都可以让我知道我哪里出错了吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

在JS中使用for...in会导致问题(更多关于in this post)。其次,尝试通过SpreadsheetApp类而不是Browser按钮使用内置的UI类。

function setDraft() {
  var ui = SpreadsheetApp.getUi();
  var allsheets = SpreadsheetApp.getActiveSpreadsheet().getSheets();

  //msg box to confirm relevant sheets are hidden, thus excluded from code
  var response = ui.alert("SET AS DRAFT","Have you hidden sheets you don't want marked as draft?", ui.ButtonSet.YES_NO);
  if(response == ui.Button.NO) {
    return;
  } else {
    for (var s=0; s<allsheets.length; s++){
      var sheet=allsheets[s]
      var date = sheet.getRange('I1')

      if (sheet.isSheetHidden()!= true) {   
        sheet.setActiveSelection(date);
        sheet.getRange('I5').setValue('DRAFT');
      }    
    }
  }
}

答案 1 :(得分:0)

使用sheet.activate()range.activate()方法。如果您只想转到特定工作表,请使用sheet method,但如果您想要选择特定单元格,请使用range。我没有测试过范围,但是,我知道如果您使用sheet.activate(),那么您将被带到该表。