Скрипт Google Spreadsheet для смены формата всего листа
Мне нужен скрипт, который выделял бы весь лист в таблице Google Spreadsheet и менял формат значений с цифрового на процент. И аналогичный, чтобы производилась обратная замена (с процентов в цифры). Все это вроде как можно записать с помощью макросов, я так и сделал - получил вот:
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('C2:C5').activate();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.NEXT).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRangeList().setNumberFormat('#,##0.00')
.setNumberFormat('#,##0.0')
.setNumberFormat('#,##0')
.setNumberFormat('#,##0.0')
.setNumberFormat('#,##0.00');
};
function Test1() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('C2:C5').activate();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.NEXT).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getActiveRangeList().setNumberFormat('0.00%')
.setNumberFormat('0.000%')
.setNumberFormat('0.00%');
};```
НО, затем я хочу сделать условия для применения этого скрипта на листе. Грубо говоря, если A1 = "в проценты", то ячейки оборачиваются в Test1, если A1 = "в числа", то ячейки оборачиваются в функцию Test.
Ответы (1 шт):
Для начала сделаем выпадающий список из двух вариантов в ячейке A1, как показано ниже на рисунке:
Это даст нам возможность управлять форматом чисел на этом же листе, изменяя данные в ячейке A1.
Далее переходим в редактор скриптов и пишем функцию:
function onEdit(e) {
if (e.range.getA1Notation() != 'A1') return;
// В адресе диапазона A1:Z указываем последнюю колонку на листе (у меня это Z)
const r = SpreadsheetApp.getActiveSheet().getRange('A1:Z');
if (e.value == 'числа') {
r.setNumberFormat('#.##0');
} else if (e.value == 'проценты') {
r.setNumberFormat('0.00%');
}
}
Функция с именем onEdit будет выполняться при каждом изменении данных на листе. Подробнее об этом - здесь. Но в первой же строке внутри функции мы отсекаем обработку для тех изменений, которые не связаны с ячейкой A1. А связанные с A1 изменения анализируем и применяем ко всему листу соответствующий числовой формат.