Array.push.setAnyFormatting ( 'красный')?
Описание:
Пользователь Stack Overflow mhawksey недавно сделал несколькофантастическая оптимизация моего кода, и при этом познакомил меня с супер эффективными толчками массива. Но работать с массивами довольно сложно, потому что я не могу использовать функции, которые могу использовать при традиционном подходе .getRange / .setValue.
Проблема:
Мне нужно интегрировать .setFontColors («красный») и .setBackgroundColors («белый»).
Код и изображения:
Сначала я выложу код. Во-вторых, изображение того, чтоВ настоящее время код делает. В-третьих, изображение того, что кодпотребности сделать.
function format() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var lastRow = s.getLastRow();
var row;
//gets a [][] of all values in the column
var data = s.getRange("A:A").getValues();
//we are going to build a [][] to output result
var output = [];
//loop through all cells in column A
for (row = 0; row < lastRow; row++) {
var cellValue = data[row][0];
var dash = false;
if (typeof cellValue === 'string') {
dash = cellValue.substring(0, 1);
//if a number copy to our output array
} else {
output.push([cellValue]);
}
//if -dash
if (dash === "-") {
//build first + last name
var name = (data[(row+1)][0]+" "+data[(row+2)][0]).trim();
//add row for the -state (e.g. -MI)
output.push([cellValue]);
output.push([name]);
output.push(["Order complete"]);
//add a blank row
output.push([""]);
//jump an extra row to speed things up
row++;
}
}
//set the values we've made in our output [][] array
s.getRange(1, 1, output.length).setValues(output);
}
Вот что делает код:
Вот чего я пытаюсь добиться:
Обновить:
Я добавил простой, работающий цикл форматирования. Проблема в том, что когда я запускаю его на более длинном столбце данных, обработка занимает слишком много времени. Из того, что я понимаю из комментариев, я не могу быстро отформатировать таблицу. Я ошибся?
Добавленный код форматирования:
//other variables
var range1;
//loop through column A
for (var row = 0; row < lastRow; row++) {
range1 = s.getRange(row + 1, 1);
//define offsets for if statement
var offset1 = range1.offset(1, 0);
var offset2 = range1.offset(2, 0);
//substring cannot run on numbers, so...
cellValue = range1.getValue();
if (typeof cellValue === 'number') {continue;};
dash = cellValue.substring(0, 1);
//if -
if (dash === "-") {
offset1.setFontColor('red');
offset2.setBackground('green');
};
};