Google 同一单元格的 Apps 脚本 setValue() 和 setBackgroundRGB()
Google Apps Script setValue() AND setBackgroundRGB() for the same cell
我正在尝试对同一个单元格同时使用 setValue 和 setBackgroundRGB 方法,但它不起作用。
实际上,只有 setValue 有效。我尝试了以下 if-else 条件的 3 种不同方式,但我总是只看到数字而背景颜色没有任何变化。如果我删除数字,只有这样我才能看到颜色。是否可以为同一个单元格同时使用两者?
(另外,有没有办法在不使用活动单元格的情况下在特定列中工作?)
function onEdit(e) {
var active_cell = e.range;
var active_column = active_cell.getColumn();
if(active_sheet.getName().startsWith("202")){
var in_row= 5;
var exp_row= 6;
var diff_row = 7;
var income = active_sheet.getRange(in_row,active_column).getValue();
var expenses = active_sheet.getRange(exp_row,active_column).getValue();
var diff = income - expenses;
if (active_column >= 2){
if(income > expenses) {
active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0).setValue(diff);
} else if (income == expenses) {
active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
} else {
active_sheet.getRange(diff_row,active_column).setValue(diff);
active_sheet.getRange(diff_row,active_column).set.setBackgroundRGB(255,0,0);
}
}
}
}
active_sheet
未在您的代码中定义,Range.setBackgroundRGB() and Range.setValue() 在您的任一组合中都按预期工作。
更新代码:
function onEdit(e) {
var active_sheet = e.source.getActiveSheet();
var active_cell = e.range;
var active_column = active_cell.getColumn();
if(active_sheet.getName().startsWith("202")){
var in_row= 5;
var exp_row= 6;
var diff_row = 7;
var income = active_sheet.getRange(in_row,active_column).getValue();
var expenses = active_sheet.getRange(exp_row,active_column).getValue();
var diff = income - expenses;
if (active_column >= 2){
if(income > expenses) {
active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0).setValue(diff);
} else if (income == expenses) {
active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
} else {
active_sheet.getRange(diff_row,active_column).setValue(diff);
active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0);
}
}
}
}
输出:
关于您的其他问题:是否可以在不使用活动单元格的情况下在特定列中工作?
- 是的,您可以 select 将特定列作为您的范围,而无需使用活动单元格的列索引。当 select 使用 Sheet.getRange(row, column).
范围时,您只需要提供一个硬编码的列索引
示例:
var income = active_sheet.getRange(in_row,4).getValue();
- 在这里,我将访问 D 列(在索引 4 中)中的单元格。
我正在尝试对同一个单元格同时使用 setValue 和 setBackgroundRGB 方法,但它不起作用。 实际上,只有 setValue 有效。我尝试了以下 if-else 条件的 3 种不同方式,但我总是只看到数字而背景颜色没有任何变化。如果我删除数字,只有这样我才能看到颜色。是否可以为同一个单元格同时使用两者?
(另外,有没有办法在不使用活动单元格的情况下在特定列中工作?)
function onEdit(e) {
var active_cell = e.range;
var active_column = active_cell.getColumn();
if(active_sheet.getName().startsWith("202")){
var in_row= 5;
var exp_row= 6;
var diff_row = 7;
var income = active_sheet.getRange(in_row,active_column).getValue();
var expenses = active_sheet.getRange(exp_row,active_column).getValue();
var diff = income - expenses;
if (active_column >= 2){
if(income > expenses) {
active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0).setValue(diff);
} else if (income == expenses) {
active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
} else {
active_sheet.getRange(diff_row,active_column).setValue(diff);
active_sheet.getRange(diff_row,active_column).set.setBackgroundRGB(255,0,0);
}
}
}
}
active_sheet
未在您的代码中定义,Range.setBackgroundRGB() and Range.setValue() 在您的任一组合中都按预期工作。
更新代码:
function onEdit(e) {
var active_sheet = e.source.getActiveSheet();
var active_cell = e.range;
var active_column = active_cell.getColumn();
if(active_sheet.getName().startsWith("202")){
var in_row= 5;
var exp_row= 6;
var diff_row = 7;
var income = active_sheet.getRange(in_row,active_column).getValue();
var expenses = active_sheet.getRange(exp_row,active_column).getValue();
var diff = income - expenses;
if (active_column >= 2){
if(income > expenses) {
active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0).setValue(diff);
} else if (income == expenses) {
active_sheet.getRange(diff_row,active_column).setValue(diff).setBackgroundRGB(0,255,0);
} else {
active_sheet.getRange(diff_row,active_column).setValue(diff);
active_sheet.getRange(diff_row,active_column).setBackgroundRGB(255,0,0);
}
}
}
}
输出:
关于您的其他问题:是否可以在不使用活动单元格的情况下在特定列中工作?
- 是的,您可以 select 将特定列作为您的范围,而无需使用活动单元格的列索引。当 select 使用 Sheet.getRange(row, column). 范围时,您只需要提供一个硬编码的列索引
示例:
var income = active_sheet.getRange(in_row,4).getValue();
- 在这里,我将访问 D 列(在索引 4 中)中的单元格。