Google 根据另一个单元格值为单元格着色的脚本
Google script to color a cell based on another cells value
我正在尝试根据列中某个单元格是否大于(同一行中的)另一个单元格来更改它的颜色
我已经设置了条件格式,但是当我在 sheet 中复制粘贴时公式变得混乱,因此我希望对 gs 做同样的事情。
我发现我需要使用 onEdit()
(https://developers.google.com/apps-script/guides/triggers/#Simple) 在每个单元格更改时更新更改。
并从此处的其他问题中获得了一些代码,但我在 getRange 中遇到错误。
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
var values = sheet.getRange(2, 16, 3).getValues();
var values_now = sheet.getRange(2, 5, 3).getValues();
var color = '';
var current_row = 2
for (var i = 0; i < values.length; i++)
{
if (values_now[i][0] > values[i][0])
{
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.alert(values_now[i][0] + ' ' + values[i][0]);
color='#FFDD88'
}
else if (values_now[i][0] < values[i][0])
{
color = '#CC6666'
}
sheet.getRange(current_row, 5).setBackgroundColor(color);
current_row++
}
}
我 select 的值范围是 P2:P243,在 values_now E2:E243 中,最后一个范围是我喜欢给单元格着色的范围。
- 所以如果 P2 比 E2 大,E2 应该是蓝色的
- 如果P32小于E32,E32应该是红色。等等...
这个修改怎么样?修改后的脚本流程如下。请将此视为几个答案之一。
- 从单元格中检索值。
- 将红色和蓝色的坐标放入数组。
- 将检索到的坐标应用于单元格。
修改后的脚本:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
var values = sheet.getRange("E2:P243").getValues();
var colorToRed = [];
var colorToBlue = [];
for (var i = 0; i < values.length; i++) {
var e = values[i][0];
var p = values[i][11];
if (e > p) {
colorToRed.push("E" + (i + 2));
} else if (e < p) {
colorToBlue.push("E" + (i + 2));
}
}
sheet.getRangeList(colorToRed).setBackground("#FFDD88"); // #FFDD88 is used as red?
sheet.getRangeList(colorToBlue).setBackground("#CC6666"); // #CC6666 is used as blue?
}
注:
- 在此修改后的脚本中,当列 "E" 和 "P" 的值相同时。背景颜色不变。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
编辑:
作为其他示例脚本,当使用setBackgrounds()
时,脚本如下。
示例脚本:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
var values = sheet.getRange("E2:P243").getValues();
var colors = [];
for (var i = 0; i < values.length; i++) {
var e = values[i][0];
var p = values[i][11];
if (e > p) {
colors.push(["#FFDD88"]); // #FFDD88 is used as red?
} else if (e < p) {
colors.push(["#CC6666"]); // #CC6666 is used as blue?
} else {
colors.push([""]);
}
}
sheet.getRange(2, 5, colors.length, 1).setBackgrounds(colors);
}
我正在尝试根据列中某个单元格是否大于(同一行中的)另一个单元格来更改它的颜色
我已经设置了条件格式,但是当我在 sheet 中复制粘贴时公式变得混乱,因此我希望对 gs 做同样的事情。
我发现我需要使用 onEdit()
(https://developers.google.com/apps-script/guides/triggers/#Simple) 在每个单元格更改时更新更改。
并从此处的其他问题中获得了一些代码,但我在 getRange 中遇到错误。
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
var values = sheet.getRange(2, 16, 3).getValues();
var values_now = sheet.getRange(2, 5, 3).getValues();
var color = '';
var current_row = 2
for (var i = 0; i < values.length; i++)
{
if (values_now[i][0] > values[i][0])
{
SpreadsheetApp.getUi() // Or DocumentApp or FormApp.
.alert(values_now[i][0] + ' ' + values[i][0]);
color='#FFDD88'
}
else if (values_now[i][0] < values[i][0])
{
color = '#CC6666'
}
sheet.getRange(current_row, 5).setBackgroundColor(color);
current_row++
}
}
我 select 的值范围是 P2:P243,在 values_now E2:E243 中,最后一个范围是我喜欢给单元格着色的范围。
- 所以如果 P2 比 E2 大,E2 应该是蓝色的
- 如果P32小于E32,E32应该是红色。等等...
这个修改怎么样?修改后的脚本流程如下。请将此视为几个答案之一。
- 从单元格中检索值。
- 将红色和蓝色的坐标放入数组。
- 将检索到的坐标应用于单元格。
修改后的脚本:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
var values = sheet.getRange("E2:P243").getValues();
var colorToRed = [];
var colorToBlue = [];
for (var i = 0; i < values.length; i++) {
var e = values[i][0];
var p = values[i][11];
if (e > p) {
colorToRed.push("E" + (i + 2));
} else if (e < p) {
colorToBlue.push("E" + (i + 2));
}
}
sheet.getRangeList(colorToRed).setBackground("#FFDD88"); // #FFDD88 is used as red?
sheet.getRangeList(colorToBlue).setBackground("#CC6666"); // #CC6666 is used as blue?
}
注:
- 在此修改后的脚本中,当列 "E" 和 "P" 的值相同时。背景颜色不变。
参考文献:
如果我误解了你的问题,这不是你想要的结果,我深表歉意。
编辑:
作为其他示例脚本,当使用setBackgrounds()
时,脚本如下。
示例脚本:
function onEdit(e) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Programar');
var values = sheet.getRange("E2:P243").getValues();
var colors = [];
for (var i = 0; i < values.length; i++) {
var e = values[i][0];
var p = values[i][11];
if (e > p) {
colors.push(["#FFDD88"]); // #FFDD88 is used as red?
} else if (e < p) {
colors.push(["#CC6666"]); // #CC6666 is used as blue?
} else {
colors.push([""]);
}
}
sheet.getRange(2, 5, colors.length, 1).setBackgrounds(colors);
}