Как я могу упростить этот код с помощью функции цикла - PullRequest
1 голос
/ 25 октября 2019

У меня есть электронная таблица, которая изменяет ячейку A2 с 1 на 12, а затем копирует 3 отдельных диапазона на одном листе в 3 отдельных диапазона на другом листе. итого 36 заданий на копирование и прошлые значения. Я только что записал макрос, но он очень медленный, поэтому я могу использовать функцию цикла для ускорения всего этого.

Еще один момент заключается в том, что я сохраняю исходное значение A2 в ячейке, а затем копирую его обратно, чтобыэлектронная таблица возвращается в исходное положение в конце задания.

Как указано выше

function GraphDataCopy() {
      var spreadsheet = SpreadsheetApp.getActive();
      spreadsheet.getRange('I8').activate();
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Rolling Forecast SUMMARY'), true);
      spreadsheet.getRange('A2').activate();
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Graph Data Sheet'), true);
      spreadsheet.getRange('B2').activate();
      spreadsheet.getRange('\'Rolling Forecast SUMMARY\'!A2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Rolling Forecast SUMMARY'), true);
      spreadsheet.getCurrentCell().setValue('1');
      spreadsheet.getRange('B13:D13').activate();
      spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Graph Data Sheet'), true);
      spreadsheet.getRange('B6').activate();
      spreadsheet.getRange('\'Rolling Forecast SUMMARY\'!B13:D13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);

И так до

  spreadsheet.getRange('B2').activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Rolling Forecast SUMMARY'), true);
  spreadsheet.getRange('A2').activate();
  spreadsheet.getRange('\'Graph Data Sheet\'!B2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
};
...