我有一张看起来像这样的表:
如您所见,这是一个简单的库存跟踪系统。现在,我有 3 个产品。有些产品实际上并没有不同的颜色(例如俗气设计 T 恤),因此对于这些产品,变体(颜色)保留为空。我面临的一个问题是,实际了解我所在的行有点困难,因为某些单元格保持为空。理想情况下,我希望电子表格看起来像这样:
有了边框,产品之间就有了明显的区分。我希望这是动态的。逻辑可能来自
B
列不为空,以及其后 B
为空的所有行,这些行被视为一个组并在底部接壤。
有没有办法做到这一点,以便每当我添加新产品时,它都会相应地分组?感谢您的帮助。
编辑:
电子表格链接:
之前(我所拥有的): https://docs.google.com/spreadsheets/d/1r3ybiy5Gaw7SYDZlYA68HmvPCCoxI-Bz7qpPCSK146A/edit?usp=sharing
之后(基本上是我想要的): https://docs.google.com/spreadsheets/d/1sS3Y_MH4DaYD4QW19vjwExd7jc4H-eB5OAGb3J4njUQ/edit?usp=sharing
简而言之,我想根据以下两个条件根据名称对产品进行分组:
这个示例脚本怎么样?在此示例脚本中,当您编辑“Sheet1”工作表中的单元格时,OnEdit 事件触发器会动态添加边框。请将此视为多个答案之一。该脚本的流程如下。
我使用了上面的流程,因为我不确定编辑单元格的情况。
请将以下脚本复制并粘贴到电子表格的容器绑定脚本中(在这种情况下,请对电子表格的“之前”执行此操作。)。编辑单元格时,会添加边框。
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);
}
}
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));
}
if (i > 0 && values[i - 1][0] != e[0] && e[0] != "") {
ar.push("A" + (i + 2) + ":P" + (i + 2));
}