Javascript 当循环超过一个条件并使用两个数组作为输入时,如何更改Google Apps脚本中的背景色?
请帮助我理解,当使用两个数组作为输入在多个条件上循环时,我需要如何扩展代码以更改Google Apps脚本中的背景颜色 感谢@Cooper的帮助,我成功地编写了这段代码,根据电子表格第7列中的值更改背景颜色Javascript 当循环超过一个条件并使用两个数组作为输入时,如何更改Google Apps脚本中的背景色?,javascript,arrays,loops,google-apps-script,google-sheets,Javascript,Arrays,Loops,Google Apps Script,Google Sheets,请帮助我理解,当使用两个数组作为输入在多个条件上循环时,我需要如何扩展代码以更改Google Apps脚本中的背景颜色 感谢@Cooper的帮助,我成功地编写了这段代码,根据电子表格第7列中的值更改背景颜色 // MY CODE THAT WORKS. function randomcolors2d() { var ss = SpreadsheetApp.getActive(); var sh = ss.getSheetByName('Sheet4'); var rg = sh.ge
// MY CODE THAT WORKS.
function randomcolors2d() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Sheet4');
var rg = sh.getDataRange();
var cA = rg.getBackgrounds();
var vA = rg.getValues();
vA.forEach(function(r, i) {
r.forEach(function(c, j) {
if (vA[i][6] <= 10) {
cA[i][6] = "#f4cccc"
} if (vA[i][6] > 10) {
cA[i][6] = "#d9ead3"
}
});
});
rg.setBackgrounds(cA);
}
//我的有效代码。
函数randomcolors2d(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet4');
var rg=sh.getDataRange();
var cA=rg.getBackgrounds();
var vA=rg.getValues();
vA.forEach(函数(r,i){
r、 forEach(函数(c,j){
if(vA[i][6]10){
cA[i][6]=“#d9ead3”
}
});
});
rg.退避地(cA);
}
然而,我的问题是,这个简单的规则不适合我的数据。我的数据中有不同的产品类型,因此需要执行上述操作,但需要迭代不同的产品类型和关键(中值)。在我的例子中,它是4种产品类型和4个中值。但是这个数字可以改变,所以我需要一个更灵活的代码来解释这个问题
没有任何成功,我尝试只使用一个forEach循环,在forEach循环或if语句之前集成另一个for循环,或者使用for循环和map函数的组合
这里只有一个例子来说明我打算做什么。我希望有帮助
// CODE THAT DOES NOT WORK.
var medianResults = [11.0, 45.0, 11.0, 12.0]; // Remember, the length of these to variable can vary!
var productType = ["ProductA", "ProductB", "ProductC", "ProductD"];
// the two arrays I'd like to use for conditioning.
function randomcolors2d() {
var ss = SpreadsheetApp.getActive();
var sh = ss.getSheetByName('Sheet4');
var rg = sh.getDataRange();
var cA = rg.getBackgrounds();
var vA = rg.getValues();
for (v = 0; v < productType.length; v++) { // this does not work, but how to do it?
vA.forEach(function(r, i) {
r.forEach(function(c, j) {
if (vA[i][1] === productType[v] && vA[i][6] <= medianResults[v]) {
cA[i][6] = "#f4cccc"
} if (vA[i][1] === productType[v] && vA[i][6] > medianResults[v]) {
cA[i][6] = "#d9ead3"
}
});
});
}
rg.setBackgrounds(cA);
}
//不起作用的代码。
var medianResults=[11.0,45.0,11.0,12.0];//请记住,这些变量的长度可能会有所不同!
var productType=[“ProductA”、“ProductB”、“ProductC”、“ProductD”];
//我想用这两个数组进行调节。
函数randomcolors2d(){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet4');
var rg=sh.getDataRange();
var cA=rg.getBackgrounds();
var vA=rg.getValues();
对于(v=0;v
有什么想法吗?我们将非常感谢您的意见
=========================================================================================================================
2020年6月6日编辑:
我尝试了@Cooper提供的代码。以下是我所做的:
function testOfYourCode() {
var medianResults=[11.0,45.0,11.0,12.0];
var productType=["ProductA","ProductB","ProductC","ProductD"];
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Copyof01Summary');
var rg=sh.getDataRange();
var cA=rg.getBackgrounds();
var vA=rg.getValues();
for(let t=0;t<productType.length;t++) {
for(let m=0;m<medianResults.length;m++) {
vA.forEach(function(r, i) {
r.forEach(function(c, j) {
if (vA[i][1]==productType[t] && vA[i][6]<=medianResults[m]) {
cA[i][6]="#d9ead3"
} if (vA[i][1]==productType[t] && vA[i][6]>medianResults[m]) {
cA[i][6]="#f4cccc"
}
});
});
}
}
rg.setBackgrounds(cA);
}
函数testOfYourCode(){
var medianResults=[11.0,45.0,11.0,12.0];
var productType=[“ProductA”、“ProductB”、“ProductC”、“ProductD”];
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('CopyOf01 Summary');
var rg=sh.getDataRange();
var cA=rg.getBackgrounds();
var vA=rg.getValues();
对于(t=0;t
function randomcolors2d() {
var medianResults=[11.0,45.0,11.0,12.0];
var productType=["ProductA","ProductB","ProductC","ProductD"];
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet4');
var rg=sh.getDataRange();
var cA=rg.getBackgrounds();
var vA=rg.getValues();
for(let t=0;t<productType.length;t++) {
for(let m=0;m<medianResults.length;m++) {
vA.forEach(function(r, i) {
r.forEach(function(c, j) {
if (vA[i][1]==productType[t] && vA[i][6]<=medianResults[m]) {
cA[i][6]="#f4cccc";//red
} if (vA[i][1]==productType[t] && vA[i][6]>medianResults[m]) {
cA[i][6]="#d9ead3";//green
}
});
});
}
}
rg.setBackgrounds(cA);
}
如果它们与每种产品相关,那么通过每种产品对它们进行索引就没有任何意义。这就是编程和合理分析必须结合在一起的地方。如果您不能正确地向我们提供数据,那么我们就帮不上什么忙了。这样如何:
function randomcolors2d() {
var medianResults=[11.0,45.0,11.0,12.0];
var productType=["ProductA","ProductB","ProductC","ProductD"];
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Sheet4');
var rg=sh.getDataRange();
var cA=rg.getBackgrounds();
var vA=rg.getValues();
for(let t=0;t<productType.length;t++) {
for(let m=0;m<medianResults.length;m++) {
vA.forEach(function(r, i) {
r.forEach(function(c, j) {
if (vA[i][1]==productType[t] && vA[i][6]<=medianResults[m]) {
cA[i][6]="#f4cccc";//red
} if (vA[i][1]==productType[t] && vA[i][6]>medianResults[m]) {
cA[i][6]="#d9ead3";//green
}
});
});
}
}
rg.setBackgrounds(cA);
}
如果它们与每种产品相关,那么通过每种产品对它们进行索引就没有任何意义。这就是编程和合理分析必须结合在一起的地方。如果您不能正确地向我们提供数据,那么我们就帮不了什么忙。我们试图实现什么?与我们共享一张描述您所做的事情的图片怎么样正在尝试实现。如果您不知道想要什么,则循环数据对您没有任何好处。您正在尝试实现什么?与我们共享一个描述您尝试实现什么的图像如何。如果您不知道想要什么,则循环数据对您没有任何好处。Cooper,再次感谢您的帮助。您的代码正是我所需要的。看起来这只是第二个for循环。再次感谢!嘿,库珀,如果你不介意再看一眼你的代码,我编辑了我的问题,并添加了一个使用你的代码时得到的结果的屏幕截图。除了一个例子,你的代码没有产生正确的格式外,所有这些看起来都很好。我刷新了我的谷歌应用程序s脚本多次尝试使用不同的值。但是,结果总是完全相同的。我的ProductB格式错误。你知道为什么会发生这种情况吗?提前感谢你的帮助。这是我最后一次尝试。如果这很有帮助。如果没有,那你就靠自己了。再次感谢你的帮助!我感谢你的帮助e和您为帮助我所付出的努力。关于我没有正确呈现数据:我假设错误可能与我在工作表中格式化数据的方式有关(每个部分之间有4个空格)。这就是为什么我只提供了一个屏幕截图。我本来会与你共享一个链接,但是,正如你的个人资料中所述,你没有跟踪到谷歌工作表的链接。再次,如果我给你带来了任何不便,我深表歉意。库珀,再次感谢你的帮助。你的代码正是我所需要的。看起来,这只是一秒钟的循环时间再次感谢!嘿,库珀,如果你不介意再看一眼你的代码,我编辑了我的问题,并添加了使用你的代码时得到的结果的屏幕截图。除了一个例子,你的代码没有产生正确的格式外,所有这些都看起来不错。我刷新了我的谷歌应用程序脚本好几次,并用不同的t值也一样。但是,结果总是完全一样的。我得到了ProductB的错误格式。你知道为什么会发生这种情况吗?提前感谢你的帮助。这是我最后一次尝试。如果这很有帮助。如果没有,那就靠你自己了。再次感谢你的帮助!我感谢你花时间和精力来帮助我。关于我未正确呈现数据:我假设错误可能与我在工作表中格式化数据的方式有关(每个部分之间有4个空格)。Tha
var pA=[{type:"ProductA",medianResults:11.0},{type:"ProductB",medianResults:45.0},{type:"ProductC",medianResults:11.0},{type:"ProductD",medianResults:12.0}]