【问题标题】:Google Sheets converting Conditional Formatting to Apps ScriptsGoogle 表格将条件格式转换为 Apps 脚本
【发布时间】:2021-01-25 16:14:33
【问题描述】:

我确信没有简单的方法可以做到这一点,但我想我会问。我有一张带有大量条件格式的表格,但是,与我共享表格的人一直在复制/粘贴和移动行,这严重破坏了格式。我正在尝试为他们转换为脚本。主要是基于其他单元格信息的背景颜色。

ie:如果 A-D 列第 4 行的任何单元格中包含信息,则 K4 将为红色。一旦 K4 里面有信息,那么背景就会是白色的。

我的条件格式是:=AND(OR(ISBLANK(A4)=FALSE,ISBLANK(B4)=FALSE,ISBLANK(C4)=FALSE,ISBLANK(D4)=FALSE),ISBLANK(K4)=TRUE )。

另一个是当任何单元格具有特定术语“LWOS”时,整行都有紫色背景和删除线。

提前致谢。

【问题讨论】:

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


【解决方案1】:

我知道当您刚接触脚本时很难编写脚本,所以我理解您并决定为您提供一个适合您的代码。如果您想了解更多信息,请按照 Endothermic_Dragon 的建议学习Apps Script

代码:

function onEdit(e) {
  // Get active spreadsheet and sheet
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = spreadsheet.getActiveSheet();

  // Get row and column of the current cell edited
  var editRow = e.range.getRow();
  var editColumn = e.range.getColumn();

  // If edited cell is below row 4:
  if(editRow > 3) { 
    // Get row and K cell for checking values later
    var rowRange = sheet.getRange("A" + editRow + ":D" + editRow)
    var rowValues = rowRange.getValues();
    var kCell = sheet.getRange("K" + editRow);
    var kValue = kCell.getValue();

    var rowHasValue = rowValues[0].some(el => !!el);
    var rowHasLWOS = rowValues[0].includes("LWOS");
    var kHasValue = kValue != "";

    // If edited column is in A-D
    if(editColumn < 5) { 
      // If we see a value on that row and K row doesnt have value 
      if(rowHasValue && !kHasValue){
        // Set K cell to red
        kCell.setBackground("red");
      }

      // If columns A-D of the edited row has LWOS 
      // (cell value is "LWOS", not cell containing LWOS)
      if (rowHasLWOS){ 
        // Set row to purple and strikethrough
        sheet.getRange(editRow + ":" + editRow).setBackground("purple").setFontLine("line-through");
      }
    }
    // If edited column is K
    if(editColumn == 11) { 
      // If row doesnt have LWOS, proceed with checking the K value
      if(!rowHasLWOS) {
        // If edited value of K has value
        if(kHasValue) { 
          // Set K to white
          sheet.getRange("K" + editRow).setBackground("white");
        }
        // If K value was deleted and A-D has values
        if(rowHasValue && !kHasValue) { 
          // Set K back to red
          sheet.getRange("K" + editRow).setBackground("red");
        }
      }
    }
  }
}

输出:

上面有 cmets,所以希望你至少可以理解代码的作用和工作原理。

有关更多详细信息,请查看您可以在下面学习的参考资料。

参考资料:

【讨论】:

  • “e.range.getRow”部分返回给我,“范围”未定义。我尝试了几种不同的方式来定义它,但无济于事。
  • @JM,您是否尝试通过编辑器手动运行该功能?它变得未定义,因为它从编辑的单元格中获取了e.range。它在编辑期间被触发,因此e.range 具有价值。如果你只是在编辑器上运行它,它不会工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-18
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多