Google表格 - 在单元格处于活动状态时突出显示整行

时间:2016-07-05 12:51:22

标签: google-sheets

有人可以告诉我如何设计一个会导致活动行突出显示的工作表脚本吗?

当该行中的一个单元格处于活动状态时,我希望整个行更改字体或背景颜色。

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

谢谢!

6 个答案:

答案 0 :(得分:17)

抱歉,仅通过选择单元格,无法通过条件格式或脚本完成此操作。但是,您可以使用组合键Shift-Spacebar突出显示活动单元格的整行。

答案 1 :(得分:2)

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

我首先使用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()=EVEN(ROW())

答案 2 :(得分:0)

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

  1. 将表A列插入。
  2. 在A列中,选择要用颜色突出显示的行中的单元格。
  3. 插入菜单中,选择复选框
  4. 选择已插入复选框的整个行。
  5. 格式菜单中,选择条件格式
  6. 格式设置规则面板中,向该规则添加自定义公式
  7. 输入公式=$A1=TRUE(而不是1,请使用在步骤4中选择的第一行号)。
  8. 指定格式样式

从现在开始,选中复选框后,整个行将突出显示。

答案 3 :(得分:0)

不幸的是,这不能像我们所有人所希望的那样通过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);
};

答案 4 :(得分:0)

一个对我而言非常有效的解决方法是安装此应用https://www.autocontrol.app/,以将键的正常行为重新定义为 shift + space 组合,这实际上是选择当前行的快捷方式。 / p>

总结:我更改了向下/向上箭头的行为,以将新的键盘输入合成为向下箭头+ Shift +空格。步骤如下:

  • 安装扩展程序后,创建一个新规则,并使用向下箭头作为 trigger
  • 通过检查网址是否以https://docs.google.com/spreadsheets/开头,将行为设置为仅在Google表格中出现
  • 在“ <动作> ”部分中,选择“ 合成输入”(进入高级选项“其他”)
  • 具体的合成方法是:向下箭头,然后组合shift + space。完全以这种方式进行。该应用程序将为您显示四个按钮。
  • 在合成框中单击空格键并将其设置为 2次(这是选择整行,在某些情况下不仅是部分行,建议您尝试使用“ 1次”
  • 使用UP箭头重复该过程。

仅此而已。一开始我花了一些时间,但是在知道了窍门之后很容易。我添加了此设置的外观图片。

graphical explanation

注意:为什么GUI会在合成框中显示四个按钮:箭头,移位,空格和再次移位?这是由于新闻发布事件引起的预期行为。

注2:如果该扩展程序总体上似乎不起作用,请右键单击扩展程序图标,检查“紧急修复”,或者直接编写开发人员。

答案 5 :(得分:0)

您可以像这样使用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");
  }
}

更新需要一秒钟左右的时间-我猜该事件的触发有点慢。

这适用于台式机或触摸设备。