Google Sheets - замена отдельных частей формул в массиве - PullRequest
2 голосов
/ 19 сентября 2019

Я пытаюсь написать скрипт для замены ссылок некоторых формул на их текущее значение перед копированием в новый диапазон.

Я бы хотел сохранить оставшуюся часть формулы, чтобы я мог сохранитьистория значений без использования новых листов.

Я пробовал этот код, но в формулах не произошло никаких изменений:

function repformulas() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var formrange = sheet.getRange("h1:h6");
var formulas = formrange.getFormulas();
var reprange = sheet.getRange("c2:c6");
var pasterange = sheet.getRange("i1:i6");
var regexp = /(.{2})\s./g;
  for (var i = 0; i < formulas.length; i++) {
    for (var j = 0; j < formulas[0].length; j++) {
         formulas[i][j] = formulas[i][j].replace(regexp, repvalue[i][j]);
    }
  }
sheet.insertColumns(9, 1);
pasterange.setFormulas(formulas);
}

У меня есть это в массиве формул:

["=eomonth(I1;1)"] ["=($C$2/3869,01-1)*100"] ["=($C$3/4625,68-1)*100"] ["=($C$4/8494.69-1)*100"] ["=($C$5/15056.32-1)*100"] ["=($C$6/23540,01-1)*100"]

И я хочу заменить это следующим:

["=eomonth(I1; 1)"] ["=(4001.02/3869.01-1)*100"] ["=(4805.08/4625.68-1)*100"] ["=(8399.84/8494.69-1)*100"] ["=(15057.98/15056.32-1)*100"] ["=(23554.56/23540.01-1)*100"]

Буду очень признателен, если кто-нибудь сможет мне помочь.

1 Ответ

1 голос
/ 19 сентября 2019
  • Вы хотите поместить формулы, преобразовав a1Notations в значения.
  • I1 из =eomonth(I1;1) - объект даты.Вы хотите сохранить это и преобразовать другие a1Notations.
  • Из вашего ответа это Decimals are separated by comma in my country..
  • Вы хотите добиться этого с помощью скрипта Google Apps.

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

Поток:

  1. Получите формулы и значения из ячеек H1:H6 и C1:H6 соответственно.
  2. Получить значения C2, C3, C4, C5, C6, H1.
  3. Преобразовать полученные формулы.
    • , изменяется на ..
    • a1Notations $C$2, $C$3, $C$4, $C$5 и $C$6 изменяются на значения из«C2» - «C6».
    • В этом случае =eomonth(I1;1) преобразуется в текущее значение.Таким образом, это значение может быть сохранено.Когда выполняется sheet.insertColumns(9, 1), I1 из =eomonth(I1;1) обновляется до J1.Я думал, что это можно использовать.
  4. Вставьте столбец в столбец "I".
  5. Поместите преобразованные формулы в ячейки I1:I6, которые были вставлены.

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

Пожалуйста, измените ваш скрипт следующим образом.

function repformulas() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheets()[0];
  var formrange = sheet.getRange("h1:h6");
  var formulas = formrange.getFormulas();

  // --- I modified below script
  var [[_, _, _, _, _, H1], [C2], [C3], [C4], [C5], [C6]] = sheet.getRange("C1:H6").getValues();
  var obj = {C2: C2, C3: C3, C4: C4, C5: C5, C6: C6};
  var converted = formulas.map(function(e, i) {
    return i == 0 ? [H1] : [e[0].replace(/,/g, ".").replace(/\$[A-Z]\$\d+/, function(m) {return obj[m.replace(/\$/g, "")]})];
  });
  // ---

  var pasterange = sheet.getRange("i1:i6");
  sheet.insertColumns(9, 1);
  pasterange.setFormulas(converted);
}

Ссылки:

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