繁体   English   中英

Google Sheet App Script:将 1 个值从一张纸匹配到另一张纸,然后如果条件满足设置背景

[英]Google Sheet App Script: Match 1 values from one sheet to another sheet and then if condition met set background

我是应用程序脚本的新手,仍在学习如何做事。 这是我想要做的:我有 2 张表,第 1 张只是基于每个人语言的列中的名称(“列表”),第 2 张是时间表(“名册”)。 我想在 8 点到 5 点准时将带有人名的单元格背景更改为绿色。

非常感谢任何帮助或想法。 先感谢您。

到目前为止,这是我尝试做的事情:

function addShiftColor() {
  var ss = SpreadsheetApp.getActiveSpreadsheet(); 
  var actSheet = ss.getSheetByName('List');
  var rosSheet = ss.getSheetByName('Roster');
  var lastCol = actSheet.getLastColumn() +1;
  var lastRow = actSheet.getLastRow() +1;
  var end = rosSheet.getLastRow();
    for (var column = 1; column < lastCol; column++) {
      for (var row = 1; row < lastRow; row++) {
        var cellget = actSheet.getRange(row, column).getValue();
        var cellset = actSheet.getRange(row, column);
          for(i=1, j=5; i <= end, j <= end; i++,j++){
            var cell1 = rosSheet.getRange(i, 1).getValue();
            var cell2 = rosSheet.getRange(j, 253).getValue();
          if(cell1 === cellget && cell2 === "08 -- 17"){
          cellset.setBackground("green");
          }
      }
    }   
  }
}

第二张“花名册” 在此处输入图像描述

第一张“列表” 在此处输入图像描述

这是我想要达到的结果。 在此处输入图像描述

这是文件https://docs.google.com/spreadsheets/d/1wfSEQtqZJ3XEPla_KRBp7v56sPV5wlciHEHA7IS0MaI/edit?usp=sharing的链接

谢谢!

在您的情况下,以下示例脚本如何?

示例脚本:

function myFunction() {
  // 1. Retrieve 2 sheets.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const listSheet = ss.getSheetByName("List");
  const rosterSheet = ss.getSheetByName("Roster");

  // 2. Retrieve values.
  const listRange = listSheet.getRange(2, 1, listSheet.getLastRow() - 1, listSheet.getLastColumn());
  const [, , dates, , ...rosterValues] = rosterSheet.getDataRange().getDisplayValues();

  // 3. Create an object for searching names.
  const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd MMM");
  const col = dates.indexOf(today);
  if (col == -1) {
    throw new Error(`Date of ${today} was not found.`);
  }
  const obj = rosterValues.reduce((o, r) => {
    if (r[0]) o[r[0]] = r[col];
    return o;
  }, {});

  // 4. Create an array for changing the background color of cells.
  const colors = listRange.getValues().map((r, i) => r.map((c, j) => obj[c] && obj[c] == "08 -- 17" ? "green" : null));

  // 5. Change the background color of cells.
  listRange.setBackgrounds(colors);
}
  • 该脚本的流程如下。
    1. 检索 2 张。
    2. 检索值。
    3. 创建一个 object 用于搜索名称。
    4. 创建一个用于更改单元格背景颜色的数组。
    5. 更改单元格的背景颜色。

测试:

当此脚本运行到您的示例电子表格时,将获得以下结果。

从:

在此处输入图像描述

到:

在此处输入图像描述

笔记:

  • 在此示例中, green用作背景色。 这是来自您的脚本。 如果你想改变这个,请修改"green"

  • 此示例脚本适用于您的示例电子表格。 因此,当 Spreadsheet 的结构发生变化时,此脚本可能无法使用。 所以,请注意这一点。

参考:

添加:

关于您的以下附加问题,

我有一个问题,如果我想为 11-20 和 17-20 添加不同的 colors,脚本中应该更改什么?

在这种情况下,下面的示例脚本怎么样?

示例脚本:

function myFunction() {
  const colorObj = { "08 -- 17": "green", "17 -- 02": "blue", "11 -- 20": "red" }; // Please modify this for your actual situation.

  // 1. Retrieve 2 sheets.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const listSheet = ss.getSheetByName("List");
  const rosterSheet = ss.getSheetByName("Roster");

  // 2. Retrieve values.
  const listRange = listSheet.getRange(2, 1, listSheet.getLastRow() - 1, listSheet.getLastColumn());
  const [, , dates, , ...rosterValues] = rosterSheet.getDataRange().getDisplayValues();

  // 3. Create an object for searching names.
  const today = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "dd MMM");
  const col = dates.indexOf(today);
  if (col == -1) {
    throw new Error(`Date of ${today} was not found.`);
  }
  const obj = rosterValues.reduce((o, r) => {
    if (r[0]) o[r[0]] = r[col];
    return o;
  }, {});

  // 4. Create an array for changing the background color of cells.
  const keys = Object.keys(colorObj);
  const colors = listRange.getValues().map((r, i) => r.map((c, j) => obj[c] && keys.includes(obj[c]) ? colorObj[obj[c]] : null));

  // 5. Change the background color of cells.
  listRange.setBackgrounds(colors);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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