我对应用程序脚本还不熟悉,还在学习如何做这件事.我想做的是:我有两张表格,第一张是基于每个人的语言列中的姓名("列表"),第二张是时间表("花名册").我想把手机背景改成绿色,当人从8点到5点准时到达时,手机上有人名.

非常感谢您的任何帮助或 idea .提前谢谢你.

以下是我到目前为止试图做的事情:

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");
          }
      }
    }   
  }
}

2nd Sheet 'Roster' enter image description here

1st Sheet 'List' enter image description here

This is the result I want to achieve.enter image description here

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

非常感谢.

推荐答案

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

示例脚本:

function myFunction() {
  // 1. 取回2张纸.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const listSheet = ss.getSheetByName("List");
  const rosterSheet = ss.getSheetByName("Roster");

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

  // 3. 创建用于搜索名称的对象.
  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. 创建用于更改单元格背景 colored颜色 的array.
  const colors = listRange.getValues().map((r, i) => r.map((c, j) => obj[c] && obj[c] == "08 -- 17" ? "green" : null));

  // 5. 更改单元格的背景色.
  listRange.setBackgrounds(colors);
}
  • 这个脚本的流程如下.

测试:

将此脚本运行到示例Electron 表格时,将获得以下结果.

From:

enter image description here

To:

enter image description here

注:

  • 在本示例中,green用作背景色.这是你的 playbook .如果要更改此设置,请修改"green".

  • 此示例脚本适用于您的示例Electron 表格.因此,当Electron 表格的 struct 发生变化时,该脚本可能无法使用.所以,请小心点.

参考资料:

补充:

关于你下面的补充问题,

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

在本例中,下面的示例脚本如何?

示例脚本:

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

  // 1. 取回2张纸.
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const listSheet = ss.getSheetByName("List");
  const rosterSheet = ss.getSheetByName("Roster");

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

  // 3. 创建用于搜索名称的对象.
  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. 创建用于更改单元格背景 colored颜色 的array.
  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. 更改单元格的背景色.
  listRange.setBackgrounds(colors);
}

Javascript相关问答推荐

模块与独立组件

Redux查询多个数据库Api reducerPath&

Exceljs:我们在file.xlsx(...)&#中发现了一个问题'"" 39人;

更改JSON中使用AJAX返回的图像的路径

在使用HighChats时如何避免Datatables重新初始化错误?

如何在Angular17 APP中全局设置AXIOS

JS:XML insertBefore插入元素

如何将未排序的元素追加到数组的末尾?

Puppeteer上每页的useProxy返回的不是函数/构造函数

在画布中调整边上反弹框的大小失败

自定义图表工具提示以仅显示Y值

使用类型:assets资源 /资源&时,webpack的配置对象&无效

如何使用抽屉屏幕及其子屏幕/组件的上下文?

postman 预请求中的hmac/sha256内标识-从js示例转换

React Refs不与高阶组件(HOC)中的动态生成组件一起工作

使用CEPRESS截取时,cy.Wait()在等待5000ms的第一个路由请求时超时

与在编剧中具有动态价值的定位器交互

在高位图中显示每个y轴系列的多个值

JQuery使用选项填充HTMLSELECT并设置默认结果,默认结果显示为空

响应,Use Callback更新状态变量,该变量也存在于其依赖数组中,它如何防止无限重新呈现?