应用程序脚本 - 如何加快我的setbackground()函数?
我在应用程序脚本上的setbackground()
函数努力。我该如何加快速度?它正在工作,但执行非常慢。
我已经写了这篇文章:
function changeColor(sheetName, startColorCol, sizeCellCol, totalCellCol) {
var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
for (z = startColorCol; z <= totalCellCol; z = z + sizeCellCol) {
// As this is called onEdit() we don't want to perform the entire script every time a cell is
// edited- only when a status cell is mofified.
// To ensure this, before anything else we check to see if the modified cell is actually in the status column.
if (sSheet.getActiveCell().getColumn() == z) {
var row = sSheet.getActiveRange().getRow();
var value = sSheet.getActiveCell().getValue();
var col = "white"; // Default background color
var colLimit = z; // Number of columns across to affect
switch (value) {
case "fait":
col = "MediumSeaGreen";
break;
case "sans réponse":
col = "Orange";
break;
case "proposition":
col = "Skyblue";
break;
case "Revisions Req":
col = "Gold";
break;
case "annulé":
col = "LightCoral";
break;
default:
break;
}
if (row >= 3) {
sSheet.getRange(row, z - 2, 1, sizeCellCol).setBackground(col);
}
}
}
}
我看到我可能需要使用批处理操作,但我不知道如何使它起作用。
问题是,当更改一个值时,我需要为一系列单元格着色。有什么想法吗?
谢谢
I'm struggling with my setBackground()
function on App script. How can I speed it up? It's working but the execution is very slow.
I have written this:
function changeColor(sheetName, startColorCol, sizeCellCol, totalCellCol) {
var sSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName)
for (z = startColorCol; z <= totalCellCol; z = z + sizeCellCol) {
// As this is called onEdit() we don't want to perform the entire script every time a cell is
// edited- only when a status cell is mofified.
// To ensure this, before anything else we check to see if the modified cell is actually in the status column.
if (sSheet.getActiveCell().getColumn() == z) {
var row = sSheet.getActiveRange().getRow();
var value = sSheet.getActiveCell().getValue();
var col = "white"; // Default background color
var colLimit = z; // Number of columns across to affect
switch (value) {
case "fait":
col = "MediumSeaGreen";
break;
case "sans réponse":
col = "Orange";
break;
case "proposition":
col = "Skyblue";
break;
case "Revisions Req":
col = "Gold";
break;
case "annulé":
col = "LightCoral";
break;
default:
break;
}
if (row >= 3) {
sSheet.getRange(row, z - 2, 1, sizeCellCol).setBackground(col);
}
}
}
}
I saw I might need to use batch operations but I have no idea how to make it works.
The thing is, I need to color a range of cells when the value of one is changed. Any ideas ?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题:
var value = ssheet.getActivecell()。getValue();
)。因此,使用循环是没有意义的。解决方案:
getActivecell()。getColumn()
。此事件对象将默认情况下传递给oneDit
作为参数(e
在下面的示例中),但您应将其传递给changeColor
函数作为争论。startColorCol之间的列
和totalcellcol
。
Issues:
var value = sSheet.getActiveCell().getValue();
). Therefore, it doesn't make sense to use a loop.Solution:
getActiveCell().getColumn()
each time. This event object is passed toonEdit
as a parameter by default (e
in the sample below), but you should pass it to yourchangeColor
function as an argument.startColorCol
andtotalCellCol
.Code sample: