根据Google表格中的分组行和条件格式添加边框

时间:2019-05-01 23:24:10

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

我有一张看起来像这样的工作表:

Image 1

如您所见,它是一个简单的库存跟踪系统。现在,我有3个产品。有些产品实际上并没有不同的颜色(例如Tacky Design Tee),因此对于这些产品,变体(颜色)保持为空。我面临的一个问题是,实际上无法理解我所在的行有点困难,因为某些单元格保持为空。理想情况下,我希望电子表格看起来像这样:

Image 2

带有边框的产品之间有明显的分隔。我希望这是动态的。逻辑可能来自import { Component, OnInit, HostListener } from '@angular/core'; @Component({ selector: 'app-follower', templateUrl: './follower.component.html', styleUrls: ['./follower.component.scss'] }) export class FollowerComponent implements OnInit { @HostListener('document:mousemove', ['$event']) topPos: string; leftPos: string; onMouseMove(e) { this.topPos = e.clientY + 'px'; this.leftPos = e.clientX + 'px'; } constructor() { } ngOnInit() { } } 列不为空,并且紧随其后的所有行,其中B为空,这些行被视为一组并在底部加边框。

是否有一种方法可以使我每次添加新产品时都进行相应的分组?感谢您的帮助。

编辑:

链接到电子表格:

之前(我所拥有的): https://docs.google.com/spreadsheets/d/1r3ybiy5Gaw7SYDZlYA68HmvPCCoxI-Bz7qpPCSK146A/edit?usp=sharing

之后(基本上是我想要的): https://docs.google.com/spreadsheets/d/1sS3Y_MH4DaYD4QW19vjwExd7jc4H-eB5OAGb3J4njUQ/edit?usp=sharing

简而言之,我想根据以下两个条件根据产品名称对产品进行分组:

  • 如果某行没有名称,我们认为它是具有产品名称的最近一行的变体。
  • 如果两行具有相同的产品名称,我们显然会认为它们是同一产品的变体。

1 个答案:

答案 0 :(得分:1)

这个示例脚本怎么样?在此示例脚本中,当您在“ Sheet1”工作表中编辑单元格时,OnEdit事件触发器将动态添加边框。请认为这只是几个答案之一。该脚本的流程如下。

  1. 在编辑单元格时,脚本会由OnEdit事件触发器自动运行。
  2. 检索工作表名称。
  3. 清除所有边界。
  4. 创建用于添加边框的范围列表。
  5. 使用范围列表添加边框。

我使用上面的流程是因为我不确定编辑单元格的情况。

示例脚本:

请将以下脚本复制并粘贴到电子表格的容器绑定脚本中(在这种情况下,请将其粘贴到“之前”电子表格中。)。编辑单元格时,会添加边框。

is close?
True
True
is less than or equals to?
True
False

注意:

  • 在此示例脚本中,当编辑的工作表名称为“ Sheet1”时,将运行该脚本。如果要修改此设置,请修改function onEdit(e) { if (e.source.getActiveSheet().getSheetName() == "Sheet1") { var sheet = e.source.getActiveSheet(); sheet.getRange(1, 1, sheet.getMaxRows(), sheet.getMaxColumns()).setBorder(null, null, null, null, false, false); var values = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1).getValues(); var rangeList = values.reduce(function(ar, e, i) { if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") { ar.push("A" + (i + 1) + ":D" + (i + 1)); } return ar; }, []) rangeList.push(sheet.getRange(sheet.getLastRow(), 1, 1, sheet.getLastColumn()).getA1Notation()); sheet.getRangeList(rangeList).setBorder(null, null, true, null, false, false, "black", SpreadsheetApp.BorderStyle.SOLID_THICK); } }

参考文献:

编辑:

  • 您的第一个共享电子表格不同于您的实际电子表格。
    • 您的回复评论中共享的电子表格就是实际的电子表格。
  • 您要检查“ C”列,并将边框从“ A”列添加到“ P”。
  • 数据从第3行开始。

如果我的理解正确,请按如下方式修改上面的脚本。

发件人:

if (e.source.getActiveSheet().getSheetName() == "Sheet1") {

收件人:

var values = sheet.getRange(2, 2, sheet.getLastRow() - 1, 1).getValues();

发件人:

var values = sheet.getRange(3, 3, sheet.getLastRow() - 1, 1).getValues();

收件人:

if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") {
  ar.push("A" + (i + 1) + ":D" + (i + 1));
}