Як автоматично вставити новий рядок і зберегти функції / формули з останнього рядка?


24

У мене є таблиця з клітинками, які мають функції / формули, як ця:

введіть тут опис зображення

Мені потрібен сценарій, який створює новий рядок, копіюючи з ним функції / формули останнього використовуваного рядка. Я знаходжу цей скрипт, який створює новий рядок, але він не копіює функції / формули . Як я можу реалізувати це завдання копіювання форматування в Google Apps Script без ручного вибору та копіювання?


якщо моя попередня формула рядка = HTTPResponse (C4), як я можу скопіювати ту саму формулу, але новий номер комірки для нового рядка?
користувач1788736

Відповіді:


20

Використовуйте код нижче, щоб скопіювати також формули як звичайні значення. Додайте код, вибравши Інструменти у меню електронних таблиць. Потім виберіть редактор сценаріїв і додайте код. Не забудьте натиснути кнопку «помилка» та автентифікувати сценарій.

Код

// global 
var ss = SpreadsheetApp.getActive();

function onOpen() {
  var menu = [{name:"Add New Last Row", functionName:"addRow"}];
  ss.addMenu("Extra", menu);
}

function addRow() {
  var sh = ss.getActiveSheet(), lRow = sh.getLastRow(); 
  var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
  sh.insertRowsAfter(lRow, 1);
  range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}

Зауваження

Якщо встановити вміст лише для falseотримання стандартної копії. Якщо встановити його true, буде вставлено лише значення. Ви знайдений приклад скрипту робить набагато більшим, ніж вставки значень .....

Приклад

Я створив для вас прикладний файл: Додайте рядок із формулами


3

Ця ArrayFormula може зробити так само, не залучаючи сценарій. Введіть його в D4, і він буде перенесений автоматично в будь-якій кількості порожніх комірок під ним.

ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))

Примітки: "B4: B" означає, перегляньте всі комірки, починаючи з B4 до кінця стовпця.

Тоді як ArrayFormula піклується про копіювання себе в комірки під ним. Просто переконайтеся, що комірки під ним порожні.


3

У випадку, якщо вам потрібно додати новий рядок у верхній (перший рядок) та скопіювати формулу з першого верхнього рядка, тоді вам потрібно буде скопіювати формули через використання getFormulas()та setFormulas()функції. Ви можете змінити значення firstRowна 2, якщо, наприклад, ваша електронна таблиця має заголовки.

function addFirstRow() {
    var firstRow = 1;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(1, 1);
    newRange = sh.getRange(firstRow, 1, 1, lCol);
    newRange.setFormulas(formulas);
}

1
Привіт Денисе, ти маєш на увазі посаду, яку я створив? Я просто перевіряю сценарій, і він все ще працює. З повагою Яків Ян
Яків Ян Туінстра

Привіт @JacobJanTuinstra, так, ти маєш рацію. Я насправді намагався додати новий рядок зверху і зберегти формулу з того самого рядка, і це не вийшло, оскільки сценарій намагався скопіювати дані з новоствореного порожнього рядка. Я оновлю свою відповідь, щоб це відобразити. Дякую
dgpro

Привіт @DenGordo! Дякую за це Як я можу змінити це, якщо у мене просто є значення для переміщення, а також не формули? Спасибі!
Дрюдавід

О PS - Де я можу посилатися на яку вкладку я маю справу? Знову дякую.
Дрюдавід

-2

Для вирішення цієї проблеми я використав setFormula(range), наприклад:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var cell = sheet.getRange("B5");
 cell.setFormula("=SUM(B3:B4)");

Ваша формула автоматично збільшиться відповідно до індексу рядків.

Нарешті, ви можете додати тригер onUpdate або onEdit.


-1; Як викликається код? Ви додаєте суму, але рядок потрібно додати фізично. onUpdateТригер не існує.
Яків Ян Туїнстра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.