我从了解VBA转换为Scripts进行电子表格管理。我创建了一个函数来标记包含电子表格中某些单词的单元格。
如何引用与整体代码相关的特定单元格:
问题在于未定义以下内容。
setBackgroundColor("#99CC99&#34)
这是否合适?:
值[I] [0] .setBackgroundColor("#99CC99&#34)
以下代码:
function foo(){
var range = SpreadsheetApp.openById("1oh5wXFi4YM1bDvfF27pu1qHDKQEhn02drtfsrRgxArQ").getSheetByName("General").getRange("D:D");
var values = range.getValues();
for(var i in values){
if(values[i][0].match("Rensselaer")!=null){
setBackgroundColor("#99CC99")
}
if(values[i][0].match("Albany")!=null){
setBackgroundColor("#99CC99")
}
if(values[i][0].match("Saratoga")!=null){
setBackgroundColor("#99CC99")
}
}
}
答案 0 :(得分:4)
setBackgroundColor(color)是Class Range的一个方法,换句话说,首先你应该得到一个范围对象然后你可以为该对象调用setBackgroundColor(color)
values[i][0]
不适合引用范围,因为此变量包含单元格内容而非单元格本身。
有几种方法可以引用范围。基本形式是A1表示法,以及行号和列号。
一个非常简单的例子
function example1(){
var range = SpreadsheetApp.getActiveRange();
range.setBackgroundColor('red');
}
最近引入了Class RangeList,因此现在可以加速编辑非相邻单元格的算法。
function example2() {
var sheet = SpreadsheetApp.getActiveSheet()
var redList = [];
var vls = sheet.getRange('A1:A' + sheet.getLastRow()).getValues();
for(var i = 0; i < vls.length; i++){
if(vls[i][0]=== 'red') redList.push('A'+ (i + 1));
}
var redRangeList = sheet.getRangeList(redList).setBackground('red');
}
请注意,for循环不会调用Google Apps脚本类和方法,它使用纯JavaScript,使其比其他替代方法更快。然后通过一次调用设置几个非相邻单元格的颜色。
答案 1 :(得分:2)
您可能希望以这种方式尝试:
function foo(){
var ss=SpreadsheetApp.openById('1oh5wXFi4YM1bDvfF27pu1qHDKQEhn02drtfsrRgxArQ');
//var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('General');
//var sh=ss.getActiveSheet();
var range=sh.getRange(1,4,sh.getLastRow(),1);
var values=range.getValues();
for(var i=0;i<values.length;i++){
if(values[i][0].match(/Rensselaer|Albany|Saratoga/)){
sh.getRange(i+1,4).setBackgroundColor("#99CC99");
}
}
}
这也有效:
function foo(){
var ss=SpreadsheetApp.openById('1oh5wXFi4YM1bDvfF27pu1qHDKQEhn02drtfsrRgxArQ');
//var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('General');
//var sh=ss.getActiveSheet();
var range=sh.getRange(1,4,sh.getLastRow(),1);//gets the smallest range that has data in it
var values=range.getValues();
var colors=range.getBackgrounds();//Creates the correct size area with the starting colors
for(var i=0;i<values.length;i++){
if(values[i][0].match(/Rensselaer|Albany|Saratoga/)){//you can add more alternatives easily
colors[i][0]='#99cc99';
//sh.getRange(i+1,4).setBackgroundColor("#99CC99");
}
}
range.setBackgrounds(colors);
}
有疑问吗?