Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如果在Google工作表中满足条件,则向行添加边框格式_Google Apps Script_Google Sheets_Triggers - Fatal编程技术网

Google apps script 如果在Google工作表中满足条件,则向行添加边框格式

Google apps script 如果在Google工作表中满足条件,则向行添加边框格式,google-apps-script,google-sheets,triggers,Google Apps Script,Google Sheets,Triggers,Excel显然有这种类型的条件格式 我想通过Google Sheets实现同样的功能。以下内容应说明之前和之后的情况: 示例数据集 A B C 1 apple Macintosh 2 apple Granny Smith 3 orange Florida 4 orange Valencia 5 pear Garden 6 banana Chiquit

Excel显然有这种类型的条件格式

我想通过Google Sheets实现同样的功能。以下内容应说明之前和之后的情况:

示例数据集

        A           B           C
  1   apple     Macintosh
  2   apple     Granny Smith
  3   orange    Florida
  4   orange    Valencia
  5   pear      Garden
  6   banana    Chiquita
        A           B           C
  1   apple     Macintosh
  2   apple     Granny Smith
  ---------------------------
  3   orange    Florida
  4   orange    Valencia
  ---------------------------
  5   pear      Garden
  ---------------------------
  6   banana    Chiquita
  ---------------------------
结果示例数据集

        A           B           C
  1   apple     Macintosh
  2   apple     Granny Smith
  3   orange    Florida
  4   orange    Valencia
  5   pear      Garden
  6   banana    Chiquita
        A           B           C
  1   apple     Macintosh
  2   apple     Granny Smith
  ---------------------------
  3   orange    Florida
  4   orange    Valencia
  ---------------------------
  5   pear      Garden
  ---------------------------
  6   banana    Chiquita
  ---------------------------
此问题的脚本/答案应在第2、4、5和6行的整行(a、B和C列)下显示底部边框。电子表格逻辑相当简单:

  • 在单元格
    C1
    =IF(A1=A2,“noorder”,“BORDER”)
  • 然后将上述内容包装在
    =IF(C1=“BORDER”、addBorder(A1:C1)、“NOBORDER”)
  • 在较大的数据集中,这种格式化将帮助最终用户更容易地查看逻辑分组。需要Google应用程序脚本,因为数据将动态更新

    下面是一些谷歌应用程序脚本代码示例,但它不起作用

    function onEdit(event) {
      var sheet = SpreadsheetApp.getActiveSheet();
      var range = event.range;
    
      var startingRow = range.getRow();
      var numRows = range.getNumRows();
      for (var i = 1; i <= numRows; i++) {
        var rowNbr = startingRow + i - 1;
        Logger.log("changed row %s",rowNbr );
        //Now check the WHOLE row
        var colLeft=1; //1=A
        var colRight=11; //11=K
        var row = sheet.getRange(rowNbr,colLeft, 1, colRight - colLeft + 1);
        if(row.isBlank()) {
          row.setBorder(false, null, true, null, null, null, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
        } else {
          row.setBorder(false, null, null, null, null, null, "black", SpreadsheetApp.BorderStyle.SOLID_MEDIUM);
        }
      }
    }
    
    函数onEdit(事件){
    var sheet=SpreadsheetApp.getActiveSheet();
    var范围=事件范围;
    var startingRow=range.getRow();
    var numRows=range.getNumRows();
    
    对于(var i=1;i而言,在本问答的帮助下,我找到了答案:

    此代码测试A列中的值。如果结果为TRUE,则在整行应用边框:

    function onOpen() {
       GroupMyData(); // trigger this function on sheet opening
    }
    
    function GroupMyData() {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getSheetByName('shared'); // apply to sheet name only
      var rows = sheet.getRange('a1:g'); // range to apply formatting to
      var numRows = rows.getNumRows(); // no. of rows in the range named above
      var values = rows.getValues(); // array of values in the range named above
      var testvalues = sheet.getRange('a1:a').getValues(); // array of values to be tested (1st column of the range named above)
    
      rows.setBorder(false, false, false, false, false, false, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // remove existing borders before applying rule below
          //Logger.log(numRows);
    
      for (var i = 0; i <= numRows - 1; i++) {
          var n = i + 1;
          //Logger.log(n);
          //Logger.log(testvalues[i] > 0);
          //Logger.log(testvalues[i]);
          if (testvalues[i] > 0) { // test applied to array of values
            sheet.getRange('a' + n + ':g' + n).setBorder(null, null, true, null, null, null, "red", SpreadsheetApp.BorderStyle.SOLID_MEDIUM); // format if true
          }
      }
    };
    
    函数onOpen(){ GroupMyData();//在打开工作表时触发此函数 } 函数GroupMyData(){ var ss=SpreadsheetApp.getActiveSpreadsheet(); var sheet=ss.getSheetByName('shared');//仅适用于工作表名称 var rows=sheet.getRange('a1:g');//要应用格式的范围 var numRows=rows.getNumRows();//上述范围内的行数 var values=rows.getValues();//上述范围内的值数组 var testvalues=sheet.getRange('a1:a').getValues();//要测试的值数组(上面指定的范围的第一列) rows.setboorder(false,false,false,false,false,false,“red”,SpreadsheetApp.BorderStyle.SOLID_MEDIUM);//在应用下面的规则之前删除现有的边框 //Logger.log(numRows); 对于(VarI=0;I0); //Logger.log(testvalues[i]); if(testvalues[i]>0){//test应用于值数组 sheet.getRange('a'+n+':g'+n.).setOrder(null,null,true,null,null,null,“红色”,SpreadsheetApp.BorderStyle.SOLID_MEDIUM);//如果为true,则采用格式 } } };
    我的脚本不值得在这里重复,因为它们是从各种SO答案和API文档中复制的代码片段的混合体。我希望对Google Sheets API更精通的人能够一起制作一些东西。
    addBorder(A1:C1)
    这是一个自定义函数。自定义函数只能返回一个值,不能编辑单元格的属性或编辑其他单元格。谢谢Chris,这实际上给了我一个想法,但如果没有数组,自定义函数似乎无法作用于其他单元格: