Скрипт работает, но только для ограниченного количества строк - PullRequest
1 голос
/ 01 июля 2019

Моя оригинальная таблица содержит цены на сайте.Затем я запускаю скрипт для изменения формата и создаю несколько новых столбцов, которые нужны моему веб-сайту.Входные данные основаны на исходной электронной таблице.

Например;оригинал имеет «заголовок», а полученная электронная таблица имеет «заголовок» и «заголовок SEO».Сценарий просто копирует содержимое для «заголовка» в обоих столбцах и обрезает SEO, если он слишком длинный.

Я хотел бы отредактировать сценарий, чтобы дать мне новый столбец (AS2) с альтернативной ценой, основанной напростой расчет: столбец с названием «цена» (F2) * 1.18.

Скрипт отлично работает для ограниченного количества строк.Сначала я добавляю столбец под названием «Сайт RRP».Затем в пределах этого столбца все значения должны быть умножены на 1,18.

. Столбец, называемый "цена", умножается на 1,18. Но как только у меня получается более 2/3000 строк, процесс прерывается.Я не уверен, как я мог бы сделать свой код проще, чтобы помочь уменьшить время обработки.

ss.getRange("AS2").setFormula("=F2*1.18");
var lr = ss.getLastRow();
var fillDownRange = ss.getRange(2, 45, lr-1);
ss.getRange("AS2").copyTo(fillDownRange);

Если F2 равен 1,00, я ожидаю, что выходной сигнал AS2 будет 1,18, и то же самое для F8000 и AS8000,Но время выполнения сценария истекло.

Я начинаю свой код со следующего, чтобы определить столбцы

var ss=SpreadsheetApp.getActiveSpreadsheet();
var shSKU=ss.getActiveSheet();
var skuData=shSKU.getDataRange().getValues();

var finalData=[];
var i,j;
finalData[0]=[];
for(i=0;i<skuData[0].length;i++)
finalData[0].push(skuData[0][i]);   

finalData[0].push("Website RRP"); 

Затем я получаю свои данные в массив

for(j=0;j<skuData[i].length;j++)
{
  finalData[count].push(skuData[i][j]);
}

var arr=strip_html_tags(skuData[i][23]);
finalData[count].push(skuData[i][2]);
finalData[count].push(arr[0]);
finalData[count].push(arr[1]);
finalData[count].push("");
finalData[count].push("");
count++;
}

1 Ответ

0 голосов
/ 01 июля 2019

Из вашего вопроса не ясно, либо «AS2» - это название вашего столбца, либо вы ссылаетесь на ячейку AS2 (столбец AS, строка 2).В любом случае ss.getRange("AS2"). setFormula("=F2*1.18");не может работать для всего сценария.Вам нужно создать цикл, который повторяет все ячейки столбца AS и применяет к ним формулу.Пожалуйста, проверьте следующий код:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lr = ss.getLastRow();
  for(var i = 2; i < lr; i++) {
   var destination ="AS"+i;
   var formula = "F" + i + "*1.18";
   ss.getRange(destination).setFormula(formula);
  }
}
As for:
var fillDownRange = ss.getRange(2, 45, lr - 1);
ss.getRange("AS2").copyTo(fillDownRange);

Если вы хотите скопировать значения AS, а не формулу (что будет означать AR * 1.18), вы должны заменить

ss.getRange("AS2").copyTo(fillDownRange);

по

fillDownRange.setValues(ss.getRange("AS2:AS").getValues())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...