У меня есть вопрос о способах сокращения кода и использования определенного диапазона

#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})