繁体   English   中英

根据空白/无空白单元格更改工作表标签颜色

[英]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
    }
  });
}

设置标签颜色

我相信你的目标如下。

  • 在您的情况下,您在 Google 电子表格中有 50 多张工作表。
  • 当每张工作表的单元格“A2”有值时,您希望将选项卡颜色设置为“绿色”。
  • 当每张工作表的单元格“A2”没有值时,您希望将选项卡颜色设置为“红色”。
  • 您想通过动态运行脚本来实现这种情况。

我认为在您的情况下,每次运行都扫描所有工作表时,流程成本会变高。 那么,在这个答案中,以下流程如何?

  1. 作为初始设置,检查所有工作表并设置选项卡颜色。
    • 在这种情况下,处理成本变高。 因为所有工作表都被扫描。
  2. 初始设置完成后,只有在为每个工作表编辑单元格“A1”时,才会检查单元格“A1”并使用脚本更改选项卡颜色。

这里使用了 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM