【问题标题】:Color rows based on date in merged cell in first column in Google Sheet script根据 Google Sheet 脚本中第一列合并单元格中的日期为行着色
【发布时间】:2020-09-30 14:49:04
【问题描述】:

我有一个类似于下面的 Google 表格,日期在合并单元格的第一列中,跨越几行。我正在尝试制作一个脚本,当第一列中的日期等于脚本运行的日期时,自动为行(或文本)着色。在示例屏幕截图中,当日期为 10 月 1 日时,第 11-15 行应着色。由于脚本也在前一天运行,所以此时第 6-10 行已经着色。使用条件格式可能可以做到这一点,但我还想对这些单元格应用其他功能(例如锁定它们无法编辑),因此我需要在脚本中完成。

我发现了几个类似的问题,例如this one,但我无法将其中的任何一个调整到我的电子表格中。也许合并的单元格会导致问题?

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    解释:

    • 以下脚本将获取第一个单元格的日期值 Sheet1 的 A 列中的每个合并范围。
    • 它将日期值与今天的日期进行比较。
    • 如果单元格日期与今天的日期匹配,则 将用橙色为行(直到 F 列)着色。否则会 用白色给它们上色。

    解决办法:

    function myFunction() {
      
      const today = (new Date()).toLocaleString("sv-SE").slice(0,10);
      const ss = SpreadsheetApp.getActiveSpreadsheet();
      const sh = ss.getSheetByName("Sheet1");
    
      const range = sh.getRange("A1:A"+sh.getLastRow());
    
      const mergedRanges = range.getMergedRanges();
      
      mergedRanges.forEach(mR=> 
         {                  
         temp_vals = mR.getValues().flat();
         cell_date = (new Date(temp_vals[0]).toLocaleString("sv-SE").slice(0,10));
      
         if(today === cell_date) {
           sh.getRange(mR.getRow(),mR.getColumn(),mR.getHeight(),6).setBackground('#FF8C00');
         }   
      else{
           sh.getRange(mR.getRow(),mR.getColumn(),mR.getHeight(),6).setBackground('#ffffff');   
      }
         });
    }
    

    参考资料:

    【讨论】:

    • 如果您不想将前几天的颜色设为白色,则只需删除 else 语句并仅保留 if 条件。
    • 再次感谢 :) 我可能应该问另一个问题,但无论如何我都会在这里问。正在运行的工作表被锁定,只有给定的范围解锁。我现在还可以锁定有颜色的单元格,让这些行在以后解锁吗?
    • @avs 感谢您的回复。不幸的是,我不知道答案。您能否针对这种情况提出一个专门的问题,以便其他专家也可以帮助您?再次感谢并为给您带来的不便深表歉意。如果我的回答解决了您的问题,请考虑接受并投票 :)
    • @avs 我会在几个小时内查看它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多