我有一个脚本会遍历Google表格中特定列的行,然后根据单元格中包含的值格式化整行。问题是这个脚本非常慢,因为我在列范围的每一行上使用getValue,而不是在整个列上使用getValues并像数组一样引用它。
请参阅下面的原始脚本:
function rowLoop() {
var ss = SpreadsheetApp.openById("Fake_ID");
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName("Fake Name"));
var endRow = sheet.getLastRow();
// <= to repeat for all rows
for (var r = 1; r <= endRow; r++) {
rowAlignment(r);
}
}
function rowAlignment(r) {
var sheet = SpreadsheetApp.getActiveSheet();
var c = sheet.getLastColumn();
var row = sheet.getRange(r, 2, 1, c);
// Get cell in column E of row
var typeCell = row.getCell(1,25);
// Get its value
var typeData = typeCell.getValue();
// Test equal to 'Post' with ==
if(typeData == 'Post') {
row.setHorizontalAlignment('right').setFontSize('6').setFontStyle('italic').setFontWeight('normal');
}
else if (typeData == 'Campaign') {
row.setFontWeight('bold').setHorizontalAlignment('left').setFontSize('8').setFontStyle('normal');
}
SpreadsheetApp.flush();
}
脚本完全符合它的意思,但它的速度很慢。我尝试使用getValues而不是getValue来优化它。这是我到目前为止所写的内容,但问题在于脚本没有做任何事情。它没有弹出任何错误,它似乎没有做任何事情。见下文:
function rowTestLoop() {
var ss = SpreadsheetApp.openById("Fake_ID");
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName("Fake_Name"));
var endRow = sheet.getLastRow();
var endCol = sheet.getLastColumn();
var data = sheet.getRange(1,1, endRow, endCol).getValues();
// <= to repeat for all rows
for (var r = 1; r <= endRow; r++) {
var currentRow = sheet.getRange(r, 2, 1, endCol);
if(data[r][24] == 'Post') {
currentRow.setHorizontalAlignment('right').setFontSize('6').setFontStyle('italic').setFontWeight('normal');
}
else if (data[r][24] == 'Campaign') {
currentRow.setHorizontalAlignment('left').setFontSize('8').setFontStyle('normal').setFontWeight('bold');
}
}
SpreadsheetApp.flush();
}
有人可以帮忙吗?
答案 0 :(得分:0)
所以我相信我已经弄清楚了。
您正在尝试在第24列中查找标签post和Campaign。 但是,当您将工作表数据提取到一个数组中时,您已考虑到数组索引从&#39; 0&#39;开始的事实。电子表格索引的起始位置为&#39; 1&#39;
原始代码:if(data [r] [24] ==&#39; Post&#39;)
编辑代码:if(data [r-1] [23] ==&#39; Post&#39;)
所以基本上你需要修改索引以匹配数组而不是电子表格。换句话说,电子表格中的第1行是数组中的元素0,类似于电子表格中的第1行第12列是数组中的元素[0] [11]
function rowTestLoop() {
var ss = SpreadsheetApp.openById("Fake_ID");
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheetByName("Fake_Name"));
var endRow = sheet.getLastRow();
var endCol = sheet.getLastColumn();
var data = sheet.getRange(1,1, endRow, endCol).getValues();
// <= to repeat for all rows
for (var r = 1; r <= endRow; r++) {
var currentRow = sheet.getRange(r, 2, 1, endCol);
if(data[r-1][23] == 'Post') {
currentRow.setHorizontalAlignment('right').setFontSize('6').setFontStyle('italic').setFontWeight('normal');
}
else if (data[r-1][23] == 'Campaign') {
currentRow.setHorizontalAlignment('left').setFontSize('8').setFontStyle('normal').setFontWeight('bold');
}
}
SpreadsheetApp.flush();
}