我正在尝试从以前的相关问题中调整示例脚本。对于列 K 中的单元格值为零的行,我想将该行设为黄色。
这是我目前改编的代码:
function colorAll() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 3;
var endRow = sheet.getLastRow();
for (var r = startRow; r <= endRow; r++) {
colorRow(r);
}
}
function colorRow(r){
var sheet = SpreadsheetApp.getActiveSheet();
var c = sheet.getLastColumn();
var dataRange = sheet.getRange(r, 1, 1, c);
var data = dataRange.getValue();
var row = data[0];
if(row[0] === "0"){
dataRange.setBackground("white");
}else{
dataRange.setBackground("yellow");
}
SpreadsheetApp.flush();
}
function onEdit(event)
{
var r = event.source.getActiveRange().getRowIndex();
if (r >= 3) {
colorRow(r);
}
}
function onOpen(){
colorAll();
}
我的问题是,我不知道如何引用 K 列。在上面的链接答案中,脚本的创建者声称,“ [h]ere 是一个 Google Apps 脚本示例,它根据A 列中的值。 “首先,最重要的是,我不知道他在哪里引用 A 列。我想更改“var dataRange = sheet.getRange(r, 1, 1, c);” 到“var dataRange = sheet.getRange(r, 11 , 1, c);” 会这样做,但这只是在我的工作表末尾添加了 10 个空白列,然后脚本崩溃了。我不懂为什么。
其次,但更重要的是,他声称脚本影响整个行的说法是不准确的,因为他原来的“var dataRange = sheet.getRange(r, 1, 1, 3);” 只为前三列着色 - 这就是我添加“var c”并将“3”更改为“c”的原因。
此外,当我播放/调试脚本,或从电子表格脚本管理器运行“onEdit”时,我得到“ TypeError: Cannot read property "source" from undefined ”。我可以看到“来源”是未定义的——一开始我错误地认为它是一种方法——但我也不确定如何解决这个问题。
最后,列 K 并不总是参考列,因为我的意思是在它的左侧添加更多列。我假设每次添加列时我都必须更新脚本,但是第 2 行中有一个列标题永远不会改变,所以如果有人可以帮助我设计一些代码来查找行中的特定字符串2,然后获取该列引用以在函数 colorRow() 中使用,我将不胜感激。
我不知道这个脚本的结构是否有效,但理想情况下,我希望我的电子表格具有反应性——我不想在编辑驱动单元后或打开时重新运行这个脚本;它看起来应该这样做(如果它不是错误的话),但这是我第一次尝试使用 Google Apps 脚本,我不确定任何事情。
我不擅长编写脚本,但我早在 2006 年就在研究生院上过编程基础/Python 课程,之后不久就使用 Excel 和 Access 工作了 4 年,经常创建和调整宏。我不能真正从头开始设计,但我了解基本原理和概念,即使我不能翻译所有内容(例如,我不明白“for”中第三个参数中的“++”是什么意思我正在使用的语句:“for (var r = startRow; r <= endRow; r++ )。”我认为我在寓言上相当于一个有文化的西班牙语使用者试图阅读意大利语。
帮助和教育解释/示例将不胜感激。感谢您阅读/略读/跳到这句话。