2015-12-02 34 views
0

我有一個電子表格綁定腳本,通過單擊電子表格中的圖像來調用。我發現,如果需要修改的單元處於活動狀態或正在由用戶編輯,則可以阻止該腳本。單擊圖像運行腳本時,如何取消選擇活動單元格?

的代碼可以是任何東西,即使這樣簡單的東西:

function newf() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var range = sheet.getRange("R4"); 
    range.clear(); 
} 

當細胞R4是開放的,功能將忽略細胞。

點擊圖片運行腳本時,如何取消選擇開放單元格?

簡單的(手動)解決方案是在點擊圖像之前點擊開放單元格,但是我正在嘗試使腳本更加傻瓜化,這可能是一個代價高昂的問題。有什麼方法可以強制取消選中活動單元格?

編輯:我不是說活動單元格。絕對是「開放的細胞」。這裏是錯誤的圖片。

與數據開放細胞被輸入
Open cell with data being entered

點擊了圖片,程序運行
Clicked on Picture, program ran

+0

我想你想談談活動細胞,而不是打開細胞。您可以使用函數setActiveRange,它使用參數中的一個範圍,這個範圍可能是您希望激活的單元格。 (與getRange(x,y,1,1)其中(x,y)將是您的單元格的座標)。 – LMS

回答

1

您可以使用Sheet.setActive()到連接的用戶的光標移動到電子表格中的不同位置。您需要記住用戶界面和從其中調用的腳本之間存在關係,這使得腳本可以確定和更改當前活動的單元格。但是,這並沒有擴展到多用戶的情況 - 如果當用戶2點擊運行腳本時User1正在編輯保護單元格,腳本將不知道它。

function newf() { 
    var safePlace = "A1"; // Some safe cell 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheets()[0]; 
    var activeCell = ss.getActiveCell(); 
    if (activeCell.getSheet() == sheet && activeCell.getA1Notation() == "R4") 
    sheet.setActiveSelection(safePlace); 
    var range = sheet.getRange("R4"); 
    var activeCell = ss.getActiveCell(); 
    if (activeCell.getA1Notation() == range.getA1Notation() && activeCell.getSheet().getName() == range.getSheet().getName()) { 
    // Move user from target cell 
    sheet.setActiveSelection(safePlace); 
    range.clear(); 
} 
+0

與以前相同的問題,直到腳本完成後纔會忽略開放單元格。此解決方案現在將開放單元格中的信息放入另一個選定的「safePlace」中,但不會執行腳本的功能。 –

相關問題