![](/img/trans.png)
[英]Google App Script + Google Sheet - Loop over each cell in active sheet and add formula with local cell address
[英]Google Sheets App Script to change sheet and keep same active cell
我正在 App Script 中為 Google Sheets 編寫腳本。 該電子表格包含兩個工作表,每個工作表上都有一個按鈕。 單擊第一張紙上的按鈕會將您帶到第二張紙。 單擊第二個按鈕將帶您回到第一個。
這聽起來很簡單,但是當我將 go 恢復到每張紙時,我無法將 cursor position 恢復。 它總是改為 A1。 這是我的代碼。
function changesheet2() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet2'), true);
};
function changesheet1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Sheet1'), true);
};
根據文檔,使用參數true
調用setActiveSheet
應該恢復之前的活動選擇和 cursor position。 如果您在單個 function 中完成所有操作,這似乎可以正常工作。 當這里有兩個單獨的功能時,它不起作用。
這大概與上下文有關,誰可以看到什么數據。 我通過讓用戶單擊每個工作表中的按鈕來從相同的用戶上下文運行這兩個腳本。 我怎樣才能讓它工作?
請注意,它只有在同一個 function 中才有效。 由於 session 仍然具有以前的數據。 當 function 停止時,您無法知道之前的選擇在哪里。
示例代碼顯示它只是返回到工作表上一個激活的單元格。
// Set the first sheet as the active sheet and select the range D4:F4.
spreadsheet.setActiveSheet(firstSheet).getRange('D4:F4').activate();
// Switch to the second sheet to do some work.
spreadsheet.setActiveSheet(secondSheet);
// Switch back to first sheet, and restore its selection.
spreadsheet.setActiveSheet(firstSheet, true);
我可以建議您在 session 結束之前創建另一個表來存儲他們以前的活動單元格。
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = spreadsheet.getSheetByName('Sheet1');
var sheet2 = spreadsheet.getSheetByName('Sheet2');
var record = spreadsheet.getSheetByName("record");
function changesheet() {
var sheet = spreadsheet.getActiveSheet();
var sheetName = sheet.getSheetName();
var selection = sheet.getActiveCell().getA1Notation();
if(sheetName == sheet1.getSheetName()){ // if in sheet1, go to sheet2
spreadsheet.setActiveSheet(sheet2);
var sheet2LastActiveCell = record.getRange("A2").getValue();
// if sheet2 was previously recorded, get it's last active cell
// else, go to A1 (default cell)
if(sheet2LastActiveCell)
sheet2.getRange(sheet2LastActiveCell).activateAsCurrentCell();
}
else if(sheetName == sheet2.getSheetName()){ // if in sheet2, go to sheet1
spreadsheet.setActiveSheet(sheet1);
var sheet1LastActiveCell = record.getRange("A1").getValue();
// if sheet1 was previously recorded, get it's last active cell
// else, go to A1 (default cell)
if(sheet1LastActiveCell)
sheet1.getRange(sheet1LastActiveCell).activateAsCurrentCell();
}
else // don't do anything if not in sheet1 or sheet2
return;
// record current cell of previous sheet
recordSheet(sheetName, selection);
}
function recordSheet(sheet, range){
if (sheet == sheet1.getSheetName())
// record sheet1 active cell in A1
record.getRange("A1").setValue(range)
else
// record sheet2 active cell in A2
record.getRange("A2").setValue(range)
}
getActiveCell
將始終獲取活動工作表的活動單元格。 它無法獲取非活動表的活動單元格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.