Автоматически перетаскивать формулу в столбцы электронной таблицы Google

У меня есть таблица Google, в которую данные добавляются из таблицы слияния с использованием сценария, приведенного в этой ссылке на github. Я добавил еще два столбца в правом конце таблицы, один из которых заполняется формулой

    =COUNTIF(A$2:A$24,A2)

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

РЕДАКТИРОВАТЬ:

// evaluate project type and set identifier
function addCountIfFormulaToCell(){

    // add the id of your spreadsheet here
    var sss = SpreadsheetApp.openById('0AozvCNI02VmpdG5tb0pkUGdDR3djMm5NV0pYeThFbGc');

    // add the name of the sheet here
    var ss = sss.getSheetByName('Sheet1');

    // column you want to evaluate for the formula
    var columnToEvaluateAgainst = "A";

    // column you want to add the formula to
    var columnToAddFormulaTo = "H";

    // identifies the last row
    var lastRow = ss.getLastRow();

    // is the cell to evaluate in the last row
    var evaluateThisCell = columnToEvaluateAgainst + lastRow;

    // is the cell that gets the forumla in the last row
    var addFormulaToThisCell = columnToAddFormulaTo + lastRow;

    // this is my formula
    var projectFormula = "COUNTIF(A$2:$A,A2)";

    // grabs the cell that gets the forumla in the last row
    var ssCellToGetFormula = ss.getRange(addFormulaToThisCell);

    // sets the formula to the cell in the last row
    ssCellToGetFormula.setFormula(projectFormula);

};

person mpsbhat    schedule 23.04.2013    source источник


Ответы (2)


Другой вариант - использовать одну формулу массива, которая автоматически заполняет столбец:

=ArrayFormula(IF(LEN(A2:A);COUNTIF(A2:A;A2:A);IFERROR(1/0)))

person AdamL    schedule 23.04.2013
comment
Я хочу что-то подобное. Ваша формула заполняет столбец именно так, как мне нужно. Но проблема в том, что когда я создаю сводную таблицу с помощью запроса типа =Query(Sheet1!A1:$G, "Select A, Count(E), G GROUP BY A, G Pivot C"), он также дает количество пустых строк. Например, я сделал образец здесь. Перейдите на Sheet2 для получения результата запроса. - person mpsbhat; 24.04.2013

Pradeep… Вы можете использовать скрипт приложений, который является запускается, когда в вашу электронную таблицу добавляется новая строка.

Приведенный ниже сценарий отличается от сценария, который я использовал для вставки формулы ЕСЛИ в ячейку последней строки, которая оценивает значение в другом столбце.

Быстро:

  • Добавьте идентификатор своей таблицы.
  • Добавьте название вашего листа.
  • Я создал переменную для столбца, который буду оценивать, и столбца, в который я буду добавлять формулу. Вам это может понадобиться, а может и не понадобиться.
  • Используйте .getLastRow () чтобы получить последнюю строку таблицы.
  • Создайте диапазон, который будет точно определять ячейку, которую я хочу оценить, и ячейку, в которую я добавлю формулу.
  • Создайте переменную для формулы.
  • Получите ячейку, в которую я буду добавлять формулу.
  • Используйте .setFormula, чтобы добавить формулу в эту ячейку.

Это, вероятно, могло бы быть более эффективным, и вы, возможно, не сможете использовать это прямо из коробки, но это даст вам представление о некоторых доступных механизмах.

Крис К.

    // evaluate project type and set identifier
    function addCountIfFormulaToCell(){

        // add the id of your spreadsheet here
        var sss = SpreadsheetApp.openById('0ApI9xmBd0k....');

        // add the name of the sheet here
        var ss = sss.getSheetByName('Sheet1');

        // column you want to evaluate for the formula
        var columnToEvaluateAgainst = "B";

        // column you want to add the formula to
        var columnToAddFormulaTo = "C";

        // identifies the last row
        var lastRow = ss.getLastRow();

        // is the cell to evaluate in the last row
        var evaluateThisCell = columnToEvaluateAgainst + lastRow;

        // is the cell that gets the forumla in the last row
        var addFormulaToThisCell = columnToAddFormulaTo + lastRow;

        // this is my formula
        var projectFormula = "THIS IS MY FORMULA";

        // grabs the cell that gets the forumla in the last row
        var ssCellToGetFormula = ss.getRange(addFormulaToThisCell);

        // sets the formula to the cell in the last row
        ssCellToGetFormula.setFormula(projectFormula);

    };
person Chris Keller    schedule 23.04.2013
comment
Я добавил ваш сценарий в свой - person mpsbhat; 24.04.2013