【问题标题】:How to set background color for a row based on current date in Google Docs Spreadsheet?如何根据 Google Docs 电子表格中的当前日期设置行的背景颜色?
【发布时间】:2013-12-07 05:11:10
【问题描述】:

我有一个 Google 文档电子表格,其中 A 列是日期(A1:2013-11-22、A2:2013-11-23、A3:2013-11-24 等)。我想自动突出显示 - 为一行设置背景颜色,其中 A 列是今天的日期。每天突出显示不同的行。

我希望我需要一个脚本,恕我直言,这不可能通过 Google Docs SpreadSheet 中的条件格式来完成。

知道怎么做吗?非常感谢!

【问题讨论】:

    标签: google-apps-script row spreadsheet highlight


    【解决方案1】:

    这个很简单。

    选择它必须影响的区域并 右键单击电子表格并选择“条件格式” 从此菜单中选择“自定义公式” (它可能命名不同,但它是菜单中的最后一个选项)

    当列中的单元格> 1时需要格式化一行时,在公式框中使用这个

    =$A$1:$A$100 > 1
    

    选择你想要效果的区域

    A1:G100
    

    就是这样

    【讨论】:

      【解决方案2】:

      A 约会的地方,试试这个。

      • 右击
      • 条件格式
      • 在左侧的下拉框中更改为“自定义公式为”
      • 输入这个自定义公式:

        =(A=TODAY())
        
      • 选择背景和文字颜色

      • 范围:A1:1

      【讨论】:

        【解决方案3】:

        我就是这样做的。我做了条件格式并选择了我的范围,然后在“格式单元格如果...”我选择了自定义并使用了这个公式:

        =$B$2:$B$92 = today()
        

        我在 B 列中有我的日期,这会突出显示我范围内今天日期的整行。

        【讨论】:

        • 它对我有用。当我有每月细分时,我还需要一个版本 - 所以这突出显示了 A 列的月份与今天的 =MONTH($A$12:$A$23) = MONTH(today()) 匹配的范围
        【解决方案4】:

        简单的答案就像 Clinet。

        格式 -> 条件格式...-> (格式单元格如果...)自定义公式是

        然后填写=cells-range=today()

        例如:=$I$2:$BC$2=TODAY()

        【讨论】:

          【解决方案5】:

          我从 Serge 修改了一个示例(谢谢,Serge!),日期在 A 列中。带有日期的行清除了背景颜色,其他行保持不变。奖励:在活动工作表上运行脚本的自定义菜单。

          /* check for a cell format */
          function isValidDate(d) {
            if ( Object.prototype.toString.call(d) !== "[object Date]" )
              return false;
            return !isNaN(d.getTime());
          }
          
          /* check for a cell format */
          function colorRow()
          {
            var ss = SpreadsheetApp.getActiveSpreadsheet();
            var sh = ss.getActiveSheet();
          
            customOnOpen(sh);
          }
          
          /* set the background - main function, sh is a sheet */
          function customOnOpen(sh) {
            var headers = sh.getRange(1,1,sh.getLastRow()).getValues();
            var today = new Date().setHours(0,0,0,0);
            for(var n=0;n<headers.length;++n){
              var date = new Date(headers[n][0]).setHours(0,0,0,0);
              Logger.log('Test row '+n);
              if(date==today){
                Logger.log('Set bg at '+n);
                sh.getRange(n+1,1,1,sh.getMaxColumns()).setBackground('yellow');
              }
              else
              {
                if (isValidDate(headers[n][0])){
                  Logger.log('Clear bg at'+n);
                  sh.getRange(n+1,1,1,sh.getMaxColumns()).setBackground(null);
                }
                else{
                  Logger.log('Not a date at'+n);
                }
              }
            }
          }
          
          
          function onOpen() {
            var sheet = SpreadsheetApp.getActiveSpreadsheet();
          
            /* prepare the custom menu */
            var entries = [{
              name : "Set background",
              functionName : "colorRow"
            }];
            sheet.addMenu("My menu", entries);
          
            /* run the function for two specific sheets */
            customOnOpen(sheet.getSheetByName('Sheet1'));
            customOnOpen(sheet.getSheetByName('Sheet2'));  
          };
          

          【讨论】:

            【解决方案6】:

            您也可以在电子表格中添加一个新列进行日期匹配,如果是今天,则返回一个标志...

            =ARRAYFORMULA(IF(A1:A =TODAY(), 1, "")) - 单元格 D1 中的公式

            那就试试吧..

            var ss = SpreadsheetApp.getActiveSpreadsheet();
            var s = ss.getSheetByName('Sheet1');
            
            function onOpen() {
              var values = ss.getRange('D1:D').getValues();  // column of date flag
            
              for ( var row = 0; row < values.length; row++ ) {
                if ( values[row][0] ) {
                  break; // assuming only 1 row has today's date
                }
              }
            
              s.getRange('A1:D').setBackground(null);  // range to clear
              s.getRange(row + ":" + row).offset(1, 0).setBackground('yellow');
            
            }
            

            【讨论】:

            • 应该有;在 ARRAYFORMULA 函数中,但感谢您提供示例
            【解决方案7】:

            如果您希望它在电子表格打开时自动打开,您必须安装一个可安装的 onOpen,它将调用以下函数(从脚本编辑器转到资源 > 此脚本触发器 > 添加新触发器 > sreadsheet / on Open)

            这里是列的代码:(行见下文)

            function customOnOpen() {
              var ss = SpreadsheetApp.getActiveSpreadsheet();
              var sh = ss.getActiveSheet();
              var headers = sh.getRange(1,1,1,sh.getLastColumn()).getValues();
              var today = new Date().setHours(0,0,0,0);
              for(var n=0;n<headers[0].length;++n){
                var date = new Date(headers[0][n]).setHours(0,0,0,0);
                Logger.log(today+' =? '+date)
                if(date==today){
                  n++
                  Logger.log('match on column '+n)
                  if(n>=2){sh.getRange(1,n-1,sh.getMaxRows(),1).setBackground(null);};// resets the backGround for yesterday if not the first column
                  sh.getRange(1,n,sh.getMaxRows(),1).setBackground('yellow');
                  break;
                }
              }
            }
            

            这个版本为行着色

            function customOnOpen2() {
              var ss = SpreadsheetApp.getActiveSpreadsheet();
              var sh = ss.getActiveSheet();
              var headers = sh.getRange(1,1,sh.getLastRow()).getValues();
              var today = new Date().setHours(0,0,0,0);
              for(var n=0;n<headers.length;++n){
                var date = new Date(headers[n][0]).setHours(0,0,0,0);
                Logger.log(today+' =? '+date)
                if(date==today){
                  n++
                  Logger.log('match on column '+n)
                  if(n>=2){sh.getRange(n-1,1,1,sh.getMaxColumns()).setBackground(null);}
                  sh.getRange(n,1,1,sh.getMaxColumns()).setBackground('yellow');
                  break;
                }
              }
            }
            

            注意:如果您希望它基于计时器完全自动运行,这是完全可行的,只需使用 openByIdgetSheetByName (see doc here) 更改 ss 和 sh 变量并设置一个计时器以使其运行每天凌晨 1 点左右。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-01-06
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多