我一直在处理我公司google工作表所面临的性能问题,我需要根据2个字符串的内容对特定范围的单元格进行着色,现在我可以通过条件格式来实现但是对于550行要着色的过程来说,速度很慢5m,而且每次我更换过滤器或排序时,条件格式化都会重新计算,因此不理想。
如果标记了颜色分级标志,则它应读取两个促销字符串,即过去,当前和将来,并且在销售的每个星期中,如果该单元格处于两个字符串中的任意范围内,则应为该单元格着色>
在示例图像中,该商品在过去有两个促销,而当前字符串都标记为1-6绿色,并用半列分隔(1-6绿色; 1-6绿色),对于每周销售,我检查是否星期nr包含在这些范围之一中,如果颜色是与促销颜色相对应的单元格的颜色。
可能的颜色是蓝色,黄色,绿色和紫色,优先级从蓝色=高优先级一直到紫色=低优先级。
如果sales nr为0,则用鲜红色覆盖。
我发现脚本可以改变颜色,但是我真的不知道如何操纵它们来做这样的事情。
这是我从另一个网站获得的内容,它只是读取一个单元格内容,如果显示“打开”,则会为它着色:
function myColorFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var range = ss.getSheetByName("Form Responses 1").getRange(2,6,ss.getLastRow());
var cellRange = range.getValues();
for(i = 0; i<cellRange.length-1; i++){
if(cellRange[i][0] == "Open")
{
ss.getSheetByName("Form Responses 1").getRange(i+2,6).setBackground("red");
ss.getSheetByName("Form Responses 1").getRange(i+2,6).setFontColor('white');
}
}
}
当我标记单元格“ color grading flag”并摆脱条件太慢的条件格式时,我想运行这样的功能。
这里是另一个示例:
带圆圈的销售单元在AO列中,该列属于第48周,如果在BB列中有一个涵盖该周的促销,则用促销颜色对其进行着色。在这种情况下,第6周到第14周为蓝色,因此该行的AY和AZ列应为蓝色。
希望澄清
感谢大家的宝贵帮助
答案 0 :(得分:0)
我认为这可以完成您的版本,但速度要快得多。我仍然无法解决真正的问题。
function myColorFunction() {
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sh=ss.getSheetByName("Form Responses 1")
var rg=sh.getRange(2,6,ss.getLastRow());
var bA=rg.getBackgrounds();//get all background in the range
var fA=rg.getFontColors();//get all font colors in the range
var vA=rg.getValues();//get all values
for(i=0;i<vA.length-1;i++){
if(vA[i][0]=="Open")
{
bA[i][0]='#ff0000';//i+2 is not necessary inside the array because range starts at column2
fA[i][0]='#ffffff';
}
}
rg.setFontColors(fA);//sets ones that didn't change and ones that did at the same time.
rg.setBackgrounds(bA)
}