【发布时间】:2013-06-10 22:19:39
【问题描述】:
我正在尝试从this 以前的相关问题改编示例脚本。对于 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 r++)。”我认为我在寓言上相当于一个有文化的西班牙语使用者试图阅读意大利语。
我们将不胜感激帮助和教育解释/示例。感谢您阅读/略读/跳到这句话。
【问题讨论】:
标签: google-apps-script google-sheets