Google apps script 当单元格处于活动状态时高亮显示整行

Google apps script 当单元格处于活动状态时高亮显示整行,google-apps-script,google-sheets,formatting,Google Apps Script,Google Sheets,Formatting,如何设计一个工作表脚本,使活动行高亮显示 我想让整行在该行的一个单元格处于活动状态时更改字体或背景的颜色 我不希望触发器是单元格中的任何特定值,只要单击一个单元格,就会触发该单元格所属的整行的高亮显示。很抱歉,仅选择一个单元格无法使用条件格式或脚本完成此操作但是,您可以使用Shift+空格键组合高亮显示整行活动单元格我意识到这个问题是不久前提出的,但我在寻找相同功能时偶然发现了它。我的解决方案有点麻烦,并且不是您想要的完整解决方案,但是它结合了一个小脚本和一点条件格式 我首先使用onEdit()

如何设计一个工作表脚本,使活动行高亮显示

我想让整行在该行的一个单元格处于活动状态时更改字体或背景的颜色


我不希望触发器是单元格中的任何特定值,只要单击一个单元格,就会触发该单元格所属的整行的高亮显示。

很抱歉,仅选择一个单元格无法使用条件格式或脚本完成此操作但是,您可以使用Shift+空格键组合高亮显示整行活动单元格

我意识到这个问题是不久前提出的,但我在寻找相同功能时偶然发现了它。我的解决方案有点麻烦,并且不是您想要的完整解决方案,但是它结合了一个小脚本和一点条件格式

我首先使用onEdit()函数编写了一个小脚本:

function onEdit(e) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var targetCell = sheet.getRange('AD1');
  var activeCell = e.range.getA1Notation();
  targetCell.setValue(activeCell);
}
我选择“AD1”作为目标单元格,因为它太偏僻了,如果需要,我也可以选择隐藏该列

然后我转到条件突出显示,并将其作为自定义公式输入:

=ROW()=ROW(INDIRECT($AD$1))
瞧!每次编辑单元格时,它都会自动高亮显示整行

这并不完全是您要查找的内容,因为它不会在您单击单元格时自动高亮显示整行。。。仅当您编辑单元格时。此外,如果您运行了其他公式,并且正在使用其他条件格式,那么您的电子表格可能会开始变慢。但这是我见过的最接近可能的解决方案

虽然不那么酷,但在易读性方面仍然有一定的功能,这是每行的基本突出显示。例如:


在条件格式中:
=ROW()=偶数(ROW())

您描述的问题可以通过复选框间接解决

  • 在表中插入列A
  • 在A列中,选择要用颜色高亮显示的行中的单元格
  • 从插入菜单中,选择复选框
  • 选择已插入复选框的整行
  • 格式菜单中,选择条件格式
  • 在格式化规则面板中,将自定义公式添加到此规则中
  • 输入公式
    =$A1=TRUE
    (使用步骤4中选择的第一行号,而不是1)
  • 指定格式样式

  • 从现在起,选中复选框后,整行将高亮显示。

    遗憾的是,这无法通过onFocus完成,因为我们都希望这样,但这对我使用onEdit事件来说已经足够好了。它仍然奇怪地慢,所以也许有人可以让它更快(当然是从读/写到属性,但这是我发现的跟踪高亮显示哪一行的唯一方法)

    function onEdit(e){
      manageRowHighlight(e);  
    }
    
    function manageRowHighlight(e) {
      var props = PropertiesService.getScriptProperties();
      var prevRow = parseInt(props.getProperty('highlightedRow'));
    
      var range = e.range;
      var thisRow = range.getRow();
    
      //if it's same row, just ignore
      if (prevRow == thisRow) {
        return;
      } else if (prevRow != null){
        //else unhighlight it
        range = range.getSheet().getRange(prevRow + ':' + prevRow);
        range.setBackground(null);
      }
    
      //highlight the current row 
      var range = range.getSheet().getRange(thisRow + ':' + thisRow);
      range.setBackground('#fff2cc')
    
      //save the row so highlight can be removed later
      props.setProperty('highlightedRow', thisRow);
    };
    

    一个对我来说非常有效的解决方法是安装这个应用程序,将按键的正常行为重新定义为shift+空格组合,这实际上是选择当前行的快捷方式

    总而言之:我更改了向下/向上箭头的行为,将新的键盘输入合成为向下箭头+移位+空格。程序如下:

    • 安装扩展后,创建新规则并使用向下箭头作为触发器
    • 通过检查URL是否以开头,将行为设置为仅在Google工作表中发生
    • 在操作部分选择合成输入(转到高级选项>其他)
    • 具体的合成是:向下箭头,然后使组合shift+空格。就是这样做的。该应用程序将显示四个按钮
    • 在“合成”框中,单击空格键并将其设置为action 2次(这是选择整行,在某些情况下不仅是部分,但我建议您尝试使用“1次”)
    • 使用向上箭头重复此过程
    就这些。起初我花了一段时间,但知道了诀窍后,就很容易了。我添加了此设置的图像

    注意:为什么GUI在合成框中显示四个按钮:箭头、shift、空格和再次shift?这是新闻/发布事件导致的预期行为


    注2:如果扩展通常似乎不起作用,请右键单击扩展图标,检查“紧急修复”,或者只写开发人员

    您可以使用
    onSelectionChange
    事件,如下所示

    在我的例子中,第1行有一些标题单元格,它们有自己的背景色。如果您在第2行或更高版本中,我仅高亮显示当前行

    function onSelectionChange(e) {
      const range = e.range;
      const sheet = range.getSheet();
      const maxRows = sheet.getMaxRows();
      const maxColumns = sheet.getMaxColumns();
    
      // Clear the background color from all cells.      
      // (Except row 1 - that has my titles in it)
      sheet.getRange(2, 1, maxRows - 1, maxColumns).setBackground(null);
      
      // Don't set the background color if you're on the first row
      if (range.getRow() > 1) {
        // Highlight the current row
        sheet.getRange(range.getRow(), 1, 1, maxColumns).setBackground("#c9daf8");
      }
    }
    
    更新需要一秒钟左右的时间——我想这项活动的启动有点慢


    这可以在桌面或触摸设备上使用。

    这在excel中是可行的:但我无法在SheetStyPeer中使用它错误:无法从未定义中读取属性“范围”。(第5行,文件“Code”)这项功能在选择更改(e)函数上非常有效,而不是使用onEdit(e)。剩下的我已经按照你的安排完成了,即使用条件格式。唯一需要更新的是,为了让它完全工作,我必须在条件格式中组织条件。i、 例如,将此条件移动到列表的顶部。很棒的解决方案!但是这一个也带走了所有以前的背景格式。取消高亮显示行后,如何保留该行并重置为以前的背景色?