Скрипт листов Google для установки значений в столбце - PullRequest
0 голосов
/ 06 мая 2018

У меня есть два листа "Веса" и "Marks_All". Я хочу сделать следующее:

  1. чтение двух переменных wt1 и wt2 из "Весов"
  2. читать три столбца E, R и AM (от строки 4 до строки 94; по 90 значений каждый во всех трех столбцах)
  3. установить значения в столбце AS (от строки 4 до строки 94; 90 значений) по формуле

(значение в E [строка]) + (значение в R [строка]) * wt1 + (значение в AM [строка]) * wt2

Следующий код дает мне вывод, но есть ли лучший метод?

function Result () {
var ss1 = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss1.getSheetByName("Weight");
var wt1= sheet1.getRange("C4").getValue();
var wt2=sheet1.getRange("C10").getValue();
var ss2 = SpreadsheetApp.getActiveSpreadsheet();
var sheet2 = ss2.getSheetByName("Marks_All");
 for (var row = 4 ;row < 95; row++) {
      {
           var range1 = sheet2.getRange(row,5).getValue();
           var range2 = sheet2.getRange(row,18).getValue();
           var range3 = sheet2.getRange(row,39).getValue();
           var Result = range1+range2*wt1+range3*wt2;
           sheet2.getRange(row,45).setValue(Result);

      }
}

1 Ответ

0 голосов
/ 07 мая 2018

Как насчет этой модификации?

Очки модификации:

  • В одной электронной таблице есть Weight и Marks_All. Таким образом, вы можете использовать каждый лист, объявив SpreadsheetApp.getActiveSpreadsheet() только один раз.
  • Использование getValue() и setValue() в цикле for неэффективно. Поэтому, пожалуйста, используйте getValues() и setValues().
    • В этой модификации сначала были получены значения «A4: AM94».
    • Значения рассчитаны.
    • Рассчитанные значения были введены в «AS4: AS94».

Модифицированный скрипт:

function Result () {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet1 = ss.getSheetByName("Weight");
  var sheet2 = ss.getSheetByName("Marks_All");
  var wt1 = sheet1.getRange("C4").getValue();
  var wt2 = sheet1.getRange("C10").getValue();

  var values = ss.getRange("A4:AM94").getValues(); // Modified: Retrieve values
  var results = values.map(function(e){return [e[4] + e[17] * wt1 + e[38] * wt2]}); // Modified: Calculate the retrieved values
  sheet2.getRange(4, 45, results.length, results[0].length).setValues(results); // Modified: Put the calculated values
}

Рекомендации:

Если я неправильно понимаю ваш вопрос, извините.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...