有人可以告诉我如何设计一个会导致活动行突出显示的工作表脚本吗?
当该行中的一个单元格处于活动状态时,我希望整个行更改字体或背景颜色。
我不希望触发器成为单元格中的任何特定值,只需单击一个单元格就可以触发该单元格所属的整行的高亮显示。
谢谢!
答案 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)
您描述的问题可以通过复选框间接解决。
=$A1=TRUE
(而不是1,请使用在步骤4中选择的第一行号)。从现在开始,选中复选框后,整个行将突出显示。
答案 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 +空格。步骤如下:
仅此而已。一开始我花了一些时间,但是在知道了窍门之后很容易。我添加了此设置的外观图片。
注意:为什么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");
}
}
更新需要一秒钟左右的时间-我猜该事件的触发有点慢。
这适用于台式机或触摸设备。