首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >独立的SpreadsheetApp.getActiveSheet()总是返回第一张纸

独立的SpreadsheetApp.getActiveSheet()总是返回第一张纸
EN

Stack Overflow用户
提问于 2019-02-16 03:14:44
回答 3查看 855关注 0票数 0

SpreadsheetApp.getActiveSheet()总是返回第一个工作表,而不是活动工作表,这很可能是新工作表中的错误。

代码语言:javascript
运行
复制
function testActiveSheet(){

  var ssCentral = SpreadsheetApp.openById("xxxxxxxxxxx");
  var ssCentralName = ssCentral.getName();
  SpreadsheetApp.setActiveSpreadsheet(ssCentral);
  Logger.log('the ssCentralName is ' + ssCentralName);

  var currentActiveSheet = ssCentral.getActiveSheet();
  var currentActiveSheetName = currentActiveSheet.getName();

  Logger.log('the currentActiveSheetName is ' + currentActiveSheetName);
  }

尽管活动工作表不是第一个表,但它仍然返回第一个工作表。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-02-16 03:21:29

如果脚本是独立的,并且没有绑定到特定的电子表格,则活动表将不存在。这不是一个错误,而是预期的行为。展开活动表是用户正在查看的内容,而不是而不是脚本当前的工作内容;或者如官方文档中所说的,“电子表格中的活动表是显示在电子表格UI中的表。”

如果脚本没有绑定,那么就不会向任何用户显示工作表,因此函数只返回第一个工作表!希望这是有意义的,如果你有任何后续问题,请告诉我。

详情见这里。

票数 2
EN

Stack Overflow用户

发布于 2019-02-17 00:49:14

回应@Chris

这是脚本B

代码语言:javascript
运行
复制
function callActivateNewMember(){
   LibraryName.activateNewMember()
}


 this is the standalone SCRIPT A

 function activateNewMember(){
 // DECLARE THE CURRENT ACTIVE WORKSHEET as ssCentral
 var ssCentral = SpreadsheetApp.openById("xxxxxxxxxxxxxx");

 // check if TeamList sheet is active - if not land on Teamlist and ask to select a 
new member by his/her first name
 // goto and activate TeamList 
 var teamListSheet = ssCentral.getSheetByName('TEAM LIST');
 var teamListSheetIndex = teamListSheet.getIndex()-1;
 Logger.log('the teamListSheetIndex is ' + teamListSheetIndex);
 var currentSheet = SpreadsheetApp.getActiveSheet().getName();
 Logger.log('the currentSheet is ' + currentSheet);
 if(currentSheet !='TEAM LIST'){
   ssCentral.setActiveSheet(ssCentral.getSheets( 
  [teamListSheetIndex]).getRange('B5').activate();
  Logger.log('WRONG TABLE'); 
  return;
 }


 var teamListSheetLastRow = teamListSheet.getLastRow();
 var nberRows = teamListSheetLastRow-7


 // CHECK IF THE CELL IS IN THE FIRST COL AND IS NOT EMPTY
 // ------------------get the current row of the member selected
 var MemberRow  = ssCentral.getCurrentCell().getRow();
 var MemberCol  = ssCentral.getCurrentCell().getColumn();

 if(MemberRow <8 ||MemberCol>1 ){
   Logger.log('RIGHT TABLE - WRONG CELL SELECTED'); 
   return;
 }
 var memberCellValue = ssCentral.getCurrentCell().getValue(); 

 if(memberCellValue=='' ){
   Logger.log('CELL SELECTED EMPTY'); 
   return;
 }

 // VALIDATION : IS THIS MEMBER WAS ALREADY ACTIVATED
 //-----------get the column with “Reporting Activated” as header
 var repActiveCol = teamListSheet.getRange("D7").getColumn();

//-----------check if the cell of “Reporting Activated” is Y 
var checkY = teamListSheet.getRange(MemberRow, repActiveCol).getValue();
//-----------If checkY = “Y” then Alert OK
if (checkY == "Y") {
  Logger.log('MEMBER WAS ALREADY ACTIVATED'); 
  return;
}
// rest of the function
}
票数 0
EN

Stack Overflow用户

发布于 2019-02-17 07:21:04

在考虑了克里斯的回答之后,我决定改变策略,我现在调用独立脚本中的函数以及绑定到电子表格的脚本中的两个参数: ActiveSheet + ActiveCell。然后根据情况返回错误消息,并根据情况显示警报。它现在起作用了,但我并不完全满意,因为我想在绑定到电子表格的脚本中显示最有限的代码。

再次感谢克里斯抽出时间向我解释我面临的问题。如果你路过印尼巴厘岛,让我知道我很乐意和你一起喝杯咖啡。我们这里有一个开发中心。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54719558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档