如何在 Google Apps 脚本中添加和删除边框
Posted
技术标签:
【中文标题】如何在 Google Apps 脚本中添加和删除边框【英文标题】:How to add and remove borders in Google Apps Script 【发布时间】:2021-01-18 12:48:56 【问题描述】:目标:
-
根据下表 H 列中的单元格是否不为空,为单元格区域添加边框。该表包含名称和总票号,它们会根据我使用 QUERY 函数提取的数据的某些日期自动出现或消失。我希望能够为名称出现在 H 列的单元格中的单元格范围添加边框。
例如,假设第一次,在单元格 H3 中,出现了一个名为“John A”的名称。在这种情况下,我希望能够为 H3:I3 添加边框。如果“John B”出现在“John A”下方,那么我想为 H4:I4 添加另一个边框。以此类推。
-
根据是否删除了 H 列单元格中的值来删除边框。
例如,如果单元格 H4 的“John B”被自动删除,那么我还想删除 H4:I4 的边框。如果“John A”也从单元格 H3 中删除,那么我还想删除 H3:I3 的边框。
当前代码: 我正在尝试将位于另一个文件中的 onEdit() 函数的参数传递给 insertDynamicBorders() 函数,因为我认为这将是事件触发问题。
function insertDynamicBorders(row)
var statusSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Status");
// Columns
dateColumn = 1;
if (row > 16)
if (statusSheet.getRange("H3") != null )
var cell = statusSheet.getRange("H3:I3");
cell.setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID);
else
var cell = statusSheet.getRange("H3:I3");
cell.setBorder(false, false, false, false, false, false, "black", SpreadsheetApp.BorderStyle.SOLID);
if (statusSheet.getRange("H4") != null)
var cell = statusSheet.getRange("H4:I4");
cell.setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID);
else
var cell = statusSheet.getRange("H4:I4");
cell.setBorder(false, false, false, false, false, false, "black", SpreadsheetApp.BorderStyle.SOLID);
if (statusSheet.getRange("H5") != null)
var cell = statusSheet.getRange("H5:I5");
cell.setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID);
else
var cell = statusSheet.getRange("H5:I5");
cell.setBorder(false, false, false, false, false, false, "black", SpreadsheetApp.BorderStyle.SOLID);
if (statusSheet.getRange("H6") != null)
var cell = statusSheet.getRange("H6:I6");
cell.setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID);
else
var cell = statusSheet.getRange("H6:I6");
cell.setBorder(false, false, false, false, false, false, "black", SpreadsheetApp.BorderStyle.SOLID);
if (statusSheet.getRange("H7") != null)
var cell = statusSheet.getRange("H7:I7");
cell.setBorder(true, true, true, true, true, true, "black", SpreadsheetApp.BorderStyle.SOLID);
else
var cell = statusSheet.getRange("H7:I7");
cell.setBorder(false, false, false, false, false, false, "black", SpreadsheetApp.BorderStyle.SOLID);
问题:
-
当名称出现在 H 列的单元格中时,不会添加边框,但是当我使用 QUERY 函数直接更改从数据源中提取的数据源时会添加边框。
添加边框后,它们会添加到包含名称的单元格区域,也不包含在 H 列的单元格中。
【问题讨论】:
“脚本执行和 API 请求不会导致触发器运行。例如,调用 Range.setValue() 编辑单元格不会导致电子表格的 onEdit 触发器运行”link 阅读有关简单触发器的文档。他们只响应用户的编辑。 我诚挚的道歉,感谢您的反馈。我将通过文档并尝试更多地了解简单的触发器。 【参考方案1】:在使用 Apps 脚本触发器时,尤其是 onEdit
,请务必注意 following:
onEdit(e)
在用户更改电子表格中的值时运行。脚本执行和 API 请求不会导致触发器运行。例如,调用
Range.setValue()
编辑单元格不会导致电子表格的onEdit
触发器运行。
考虑到以上情况,你想要的无法直接实现。
解决方法
在这种情况下,您可以做的是利用可安装的触发器并创建一个时间驱动的触发器。您可以创建一个脚本,该脚本将检查电子表格中与以前版本相比发生的任何更改。由于这必须由您以编程方式完成,因此这是一个更麻烦的绕过方式。
另一个选项(仍然使用时间驱动的触发器)是检查哪个是
H
和 I
列中的最后一行(根据您的示例),并且还考虑到只有想要的值才会插入到这些列中。
参考
Apps Script Installable Triggers。【讨论】:
我对这里的延误表示歉意!感谢您的解释并提供解决方法!以上是关于如何在 Google Apps 脚本中添加和删除边框的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Google Apps 脚本将公式添加到 Google 表格?
如何在 Google Apps 脚本中向 UrlFetchApp 添加 API 密钥
使用 Google Apps 脚本删除 Gmail 电子邮件的附件