#google-apps-script
#google-apps-script
Вопрос:
У меня недостаточно знаний о скрипте приложений, поэтому я использовал макрос и попытался сократить коды, но не смог найти способ сократить этот код. Кроме того, мне интересно, есть ли способ выбрать определенные диапазоны и автозаполнить только для этого диапазона.
В настоящее время я понятия не имею, поэтому я просто поместил весь столбец …;; И получил всплывающее окно исключения с надписью «Исключение: ссылка на ячейку вне диапазона (файл’macro’, строка 30)» последняя строка кода из приведенных ниже кодов — строка 30 (spreadsheet.getRange (‘E2:F3001’).activate().sort({столбец: 1, по возрастанию: true});)
Не могли бы вы помочь мне решить эту проблему? Буду признателен за любой совет.
function myFunction3() { var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A2:B2').activate();
var currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('sheet9'), true);
spreadsheet.getRange('A2').activate();
spreadsheet.getRange(''sheet8'!A2:B').copyTo(spreadsheet.getActiveRange(),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
spreadsheet.getRange('A2').activate();
currentCell = spreadsheet.getCurrentCell();
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
currentCell.activateAsCurrentCell();
spreadsheet.getRange('E2').activate();
spreadsheet.getRange('A2:A').copyTo(spreadsheet.getActiveRange(),
SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
var dupl = spreadsheet.getRange('E2:E').activate();
dupl.removeDuplicates();
spreadsheet.getRangeList(['A:A', 'E:E']).activate().setNumberFormat('@');
spreadsheet.getRange('D2').activate();
spreadsheet.getCurrentCell().setFormula('=if(E2="","",date(year(E2),month(E2),day(E2)))');
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('d2:d3001'),
SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('F2').activate();
spreadsheet.getCurrentCell().setFormula('=iferror(TEXTJOIN("n",true,QUERY($A$2:$B,"select B where A ='"amp;E2amp;"'")),"")');
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('F2:F3001'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getRange('E2:F3001').activate().sort({column: 1, ascending: true});};
Комментарии:
1. Прекратите использовать activate. Прекратите использовать диапазоны типа ‘A2: A’.
2. Если вы перепишете вопрос с учетом рекомендаций, которые я предложил, вы можете получить лучший ответ, потому что он будет больше похож на то, что мы бы написали.
Ответ №1:
Номер столбца, указанный в sort(), относится ко всей электронной таблице, а не к диапазону
Другими словами, столбец 1
есть столбец A
— даже если ваш диапазон начинается с E
.
Если вы хотите отсортировать свой диапазон по столбцам E
, измените свой запрос следующим образом :
spreadsheet.getRange('E2:F3001').sort({column: 5, ascending: true})