使用 .getBackgrounds() 将背景颜色复制到某个范围



我正在将工作表的背景颜色复制到如下所示的数组中:

var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Refresh');
var lastRow = sheet.getLastRow();
var sourceStatusColorValues = sheet.getRange(1,11,lastRow,1).getBackgrounds(); //background color from column K (11)
var sourceProjectIDValues = sheet.getRange(1, 1, lastRow, 1).getValues();
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Projects');
var targetProjectIDValues = targetSheet.getRange(1, 1, targetSheet.getLastRow(),1).getValues();

接下来,我将一个工作表的项目 ID 与下一个工作表进行比较,并将背景颜色复制到数组中,以便我可以使用.setBackgrounds()方法以正确的顺序应用所有背景颜色。

//Compare the projectIDs for Target Sheet with the project IDs in Source Sheet.
//If match then add the background color to the colorValues array
var colorValues = [];
for (var i = 0; i < targetProjectIDValues.length; i++) {
for (var j = 0; j < sourceProjectIDValues.length; j++) {
if (targetProjectIDValues[i] == sourceProjectIDValues[j]) { 
colorValues[i] = sourceStatusColorValues[j];
break;
}
}
}
targetSheet.getRange(1, 11, targetSheet.getLastRow(), 1).setBackgrounds(colorValues);

我遇到的问题是copyValues数组中的值都是null的,而不是背景颜色的十六进制值。

我错过了什么?有人可以帮忙吗?欣赏它!!

试试这个:

function backgrounds(){
var sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
var sourceColors = sourceSheet.getRange(1, 1, sourceSheet.getLastRow(), 1).getBackgrounds();
var sourceData = sourceSheet.getRange(1, 1, sourceSheet.getLastRow(), 1).getValues();
var targetColors = [];
var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet2');
var targetData = targetSheet.getRange(1, 1, sourceSheet.getLastRow(), 1).getValues();
for (var i = 0; i < sourceData.length; i++){
if (sourceData[i][0] == targetData[i][0])
targetColors.push([sourceColors[i][0]]);
else
targetColors.push(['#FFFFFF']);
}
targetSheet.getRange(1, 1, targetSheet.getLastRow()).setBackgrounds(targetColors);
}

您遇到的问题是getBackgrounds()(此处的文档(和getValues()(此处的文档(都返回 2D 数组,并且您将它们视为 1D。我用一张带有一列值的工作表测试了这段代码,将它们与第二张工作表进行比较,它放置了与行匹配的值的相应值。

更新

我修改了代码以改用setBackgrounds(),它应该更适合处理大型数据集。

最新更新