[英]Google Apps Script - inserting a string in HTML based on if/else statement and based on whether the sheet cell is blank
[英]Change sheet tab color based on blank/no blank cell
我有一个超过 50 张的 Google 工作表。 每个工作表选项卡都标有负责在该工作表中进行更改的人员的姓名。
我想要一个脚本,使所有工作表选项卡变为红色,直到 A2 不再为空白。 当 A2 包含文本时,工作表选项卡将变为绿色。 如果 A2 中的文本被擦除使单元格再次变为空白,则工作表选项卡应变回红色。
我是脚本新手,尝试了一些在互联网上找到的片段,但它们都在 A2 中寻找特定文本来更改标签颜色。 我需要根据单元格为空白或非空白来更改选项卡颜色。
谢谢您的帮助!
function greenAndRed() {
const ss = SpreadsheetApp.getActive();
ss.getSheets().forEach(sh => {
if(sh.getRange("A2").isBlank()) {
sh.setTabColor("#ff0000");//red
} else {
sh.setTabColor("#00ff00");//green
}
});
}
我相信你的目标如下。
我认为在您的情况下,每次运行都扫描所有工作表时,流程成本会变高。 那么,在这个答案中,以下流程如何?
这里使用了 2 个函数。 示例脚本如下。
请将以下脚本复制并粘贴到 Google 电子表格的脚本编辑器中。 并且,在这个示例中,为了降低脚本的处理成本,使用了 Sheets API。 因此, 请在 Advanced Google services 中启用 Sheets API 。
在此示例脚本中,您可以设置排除的工作表。 如果要排除用于设置标签颜色的工作表,请将要排除的工作表名称设置为excludeSheetnames
变量。 如果您不想使用它,请设置const excludeSheetnames = [];
. 这样,所有的片材都被使用了。
// First, please run this function. By this, all sheets are scanned and set the tab colors.
function forInitialSetting() {
const excludeSheetnames = ["Sheet1"]; // If you want to exclude the sheets, please set the sheet names you want to exclude.
const ss = SpreadsheetApp.getActiveSpreadsheet();
const ssId = ss.getId();
const sheets = ss.getSheets();
const redColor = { red: 1, green: 0, blue: 0 }; // <-- #ff0000 (red)
const greenColor = { red: 0, green: 1, blue: 0 }; // <-- #00ff00 (green)
const { ranges, requests } = sheets.reduce((o, s) => {
const sheetName = s.getSheetName();
if (!excludeSheetnames.includes(sheetName)) {
o.ranges.push(`'${sheetName}'!A1`);
o.requests.push({ updateSheetProperties: { properties: { sheetId: s.getSheetId() }, fields: "tabColor" } });
}
return o;
}, { ranges: [], requests: [] });
const v = Sheets.Spreadsheets.Values.batchGet(ssId, { ranges }).valueRanges;
v.forEach(({ values }, i) =>
requests[i].updateSheetProperties.properties.tabColor = values && values[0][0] ? greenColor : redColor
);
Sheets.Spreadsheets.batchUpdate({ requests }, ssId);
}
// This script is automatically run by the simple trigger when the cell "A1" is edited.
// Please don't directly run with the script editor.
function onEdit(e) {
const excludeSheetnames = ["Sheet1"]; // If you want to exclude the sheets, please set the sheet names you want to exclude.
const range = e.range;
const sheet = range.getSheet();
if (e.range.getA1Notation() != "A1" || excludeSheetnames.includes(sheet.getSheetName())) return;
sheet.setTabColor(range.getDisplayValue() ? "#00ff00" : "#ff0000");
}
forInitialSetting
。 这样,所有工作表都被扫描并设置选项卡颜色。forInitialSetting
后,当您编辑单元格“A1”时,OnEdit 触发器会自动运行onEdit
函数。 这样,当单元格“A1”具有值时,选项卡颜色设置为“绿色”。 当单元格“A1”没有值时,选项卡颜色设置为“红色”。 例如,如果您想在每次编辑单元格“A1”时运行forInitialSetting
,在这种情况下,请添加以下函数并将 OnEdit 触发器安装到函数installedOnEdit
中。 在这种情况下,请删除function onEdit(e) {,,,}
。 这样,当单元格“A1”被编辑时, installedOnEdit
运行。
function installedOnEdit(e) { const excludeSheetnames = ["Sheet1"]; // If you want to exclude the sheets, please set the sheet names you want to exclude. const range = e.range; const sheet = range.getSheet(); if (e.range.getA1Notation() != "A1" || excludeSheetnames.includes(sheet.getSheetName())) return; forInitialSetting(); }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.