簡體   English   中英

如何突出顯示(標記)谷歌表格中的活動行?

[英]How can I highlight (mark) the active row in google sheets?

條件格式對此沒有幫助。 我嘗試了許多在線發布的腳本,但沒有一個有效。

同樣的問題在這里: https : //support.google.com/docs/thread/4469470?hl=en

回答:

不幸的是,這是不可能的。

更多信息:

無法完成 thids 的主要原因是Sheets API 或 Google Apps Script 具有用於工作表上活動單元格更改時的偵聽器。 如果點擊或按鈕按下未對工作表進行編輯或更改,則也沒有點擊器或按鈕按下偵聽器

測試和推理:

我在 Apps Script 上一團糟,想看看我是否可以創建某種解決方法,盡管這最終遇到了其他障礙。

使活動行改變顏色,它可以在Google Apps腳本喜歡的東西很容易做到的背景的一種方式:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var currRow = ss.getActiveCell().getRow();
sheet.getRange(currRow + ":" + currRow).setBackground("#F4C2C2");

知道這一點,並且知道我無法通過單擊調用觸發器,我創建了一個 Sheets 插件,而是使用嵌入在 HTML 文檔中的 JavaScript 函數,該函數以特定的時間間隔調用 Apps 腳本方法:

<script>
    function poll() {
      setInterval(update, 500);
    }
    function update() {
      google.script.run.rowHighlighter();
    }
</script>

code.gs文件中使用以下rowHighlighter()函數:

function rowHighlighter() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var currRow = ss.getActiveCell().getRow();

  var l = PropertiesService.getUserProperties().getProperty("currRow");
  if (l) {
    sheet.getRange(l + ":" + l).setBackground("#FFFFFF");  
  } 
  
  sheet.getRange(currRow + ":" + currRow).setBackground("#F4C2C2");
  PropertiesService.getUserProperties().setProperties({"currRow": currRow});
}

我認為可以從 Sheets 插件的側邊欄中調用此函數,並使用 Apps 腳本的PropertiesService類來存儲當前選定的行,以便在其他地方單擊時可以重置顏色。

雖然這似乎產生了積極的結果,但這只持續了幾秒鍾 - 不幸的是,在此之后 Apps 腳本配額受到影響,並且從 Apps 腳本編輯器端看到的控制台中的錯誤表明需要進行一些限制,因此不需要那么多 Apps 腳本提出請求。 當然,雖然這你可以做的事情,但增加在附加組件<body>調用update()函數的間隔會降低應用程序的實時性,並且整個功能都會中斷。

簡而言之; 這是做不到的。 Apps Script 和 Sheets API 都缺乏該功能,並且嘗試構建自己模擬它的東西將最終導致您使用所有配額,因為帳戶限制已達到。

我知道這通常是個壞消息,但我希望這對您有所幫助!

參考:

突出顯示單擊鼠標的單元格的行和列:

function onSelectionChange(e) {

  const range = e.range;
  const sheet = range.getSheet();
  const maxRows = sheet.getMaxRows();
  const maxColumns = sheet.getMaxColumns();
 
sheet.clearConditionalFormatRules();  
var formula = '=A1<>"1239"'; 
  
//---------------------------------------------------------------  
//RULE1  
var range1 = sheet.getRange(range.getRow(), 1, 1, maxColumns);
var rule1 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied(formula)
    .setBackground('lightgray')
    .setBold(true)
    .setRanges([range1])
    .build();
var rules1 = sheet.getConditionalFormatRules();
rules1.push(rule1);
sheet.setConditionalFormatRules(rules1);
//--------------------------------------------------------------- 
//RULE2
var range2 = sheet.getRange(1, range.getColumn(), maxRows, 1);
var rule2 = SpreadsheetApp.newConditionalFormatRule()
    .whenFormulaSatisfied(formula)
    .setBackground('lightgray')
    //.setBold(true)
    .setRanges([range2])
    .build();
var rules2 = sheet.getConditionalFormatRules();
rules2.push(rule2);
sheet.setConditionalFormatRules(rules2);  
  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM