Как вставить значения из одного листа в другой в последнюю строку определенного столбца - PullRequest
0 голосов
/ 05 ноября 2019

Новичок в разработке сценариев приложения, но ему удалось успешно построить свой собственный сценарий благодаря многим исследованиям, но теперь мой сценарий сталкивается с ошибками. Ниже приведен мой текущий код:

  function MyFunction() {
  var sss = SpreadsheetApp.getActive(); 
  var ss = sss.getSheetByName('Daily Sales'); 
  var range = ss.getRange('B8:H83'); 
  var data = range.getValues();
  var OUrange = ss.getRange('K8:Q83'); 
  var OUdata = OUrange.getValues();  
  var ts = sss.getSheetByName('Tracker'); 


  ts.getRange(ts.getLastRow()+1, 1,data.length, data[0].length).setValues(data); 
  ts.getRange(ts.getLastRow()+1, 1,OUdata.length, OUdata[0].length).setValues(OUdata);

}

В листе «Ежедневные продажи» я копирую значения из столбцов BH и KQ и вставляю их в последнюю строку листа «Трекер», начиная со столбца А. Значения ежедневных продаж вПолковики KQ правильно вставлены ниже значений BH, поэтому довольны этими результатами.

На листе отслеживания эти значения находятся в столбцах AG. Однако с тех пор я добавил формулы в столбцы I и J на ​​основе данных сценария и ручной записи в столбце H. Эти формулы копируются по всему столбцу в пределах таблицы (т. Е. Строка 5000). После добавления этих формул скрипт теперь вставляет значения в A5001.

Я понимаю, что это из-за этих формул, но есть ли способ обновить мой скрипт, чтобы вставить в последнюю строку столбца A, сохраняя эти формулы в столбцах I и J? Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

После удаления лишних пустых строк с листа «Трекер» можно использовать функцию appendRow, чтобы создать новую строку с ручными значениями (оставляя ячейки, для которых нужны формулы, пустыми).

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

Для краткости, если вы хотитестолбец A, B, C, E, F, чтобы иметь ручные значения и столбец D, чтобы иметь формулу, которую вы должны сделать:

var sheet = SpreadsheetApp.getActiveSheet();
sheet.appendRow(['A','B','C','','E','F']);
sheet.getRange(sheet.getLastRow(),4).setFormula('=FORMULA(HERE)');
0 голосов
/ 05 ноября 2019

Вы можете создать вспомогательную функцию, которая будет вычислять первую свободную строку данного столбца (НЕ столбец с формулами)

function MyFunction() {
var sss = SpreadsheetApp.getActive(); 
var ss = sss.getSheetByName('Daily Sales'); 
var range = ss.getRange('B8:H83'); 
var data = range.getValues();
var OUrange = ss.getRange('K8:Q83'); 
var OUdata = OUrange.getValues();  
var ts = sss.getSheetByName('Tracker'); 
var values = data.concat(OUdata).filter(function (r) {return r[0]});
var fr = findFirstFreeRow(ts, 1) // second parameter represents column to check for first free row
ts.getRange(fr, 1,values.length, values[0].length).setValues(values); 
}


function findFirstFreeRow(sheet, colNum) {
var v = sheet.getRange(1, colNum, sheet.getLastRow()).getValues(),
    l = v.length,
    r;
while (l >= 0) {
    if (v[l] && v[l][0].toString().length > 0) {
        r = (l + 2);
        break;
        } else {
        l--;
        }
    }
return r;
}

Посмотрите, поможет ли это?

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