SpreadsheetApp.getActiveSheet()总是返回第一个工作表,而不是活动工作表,这很可能是新工作表中的错误。
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);
}
尽管活动工作表不是第一个表,但它仍然返回第一个工作表。
发布于 2019-02-16 03:21:29
如果脚本是独立的,并且没有绑定到特定的电子表格,则活动表将不存在。这不是一个错误,而是预期的行为。展开活动表是用户正在查看的内容,而不是而不是脚本当前的工作内容;或者如官方文档中所说的,“电子表格中的活动表是显示在电子表格UI中的表。”
如果脚本没有绑定,那么就不会向任何用户显示工作表,因此函数只返回第一个工作表!希望这是有意义的,如果你有任何后续问题,请告诉我。
发布于 2019-02-17 00:49:14
回应@Chris
这是脚本B
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
}
发布于 2019-02-17 07:21:04
在考虑了克里斯的回答之后,我决定改变策略,我现在调用独立脚本中的函数以及绑定到电子表格的脚本中的两个参数: ActiveSheet + ActiveCell。然后根据情况返回错误消息,并根据情况显示警报。它现在起作用了,但我并不完全满意,因为我想在绑定到电子表格的脚本中显示最有限的代码。
再次感谢克里斯抽出时间向我解释我面临的问题。如果你路过印尼巴厘岛,让我知道我很乐意和你一起喝杯咖啡。我们这里有一个开发中心。
https://stackoverflow.com/questions/54719558
复制相似问题