Автоматично плъзгане на формула в колоните на електронната таблица на Google

Имам електронна таблица на Google, към която се добавят данни от обобщена таблица с помощта на скрипта, даден в тази гитхъб връзка. Добавих още две колони в десния край на електронната таблица, в която едната е попълнена с формула

    =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… Можете да използвате скрипт за приложения, който е задействан за изпълнение, когато към електронната ви таблица се добави нов ред.

Скриптът по-долу е модифициран от този, който използвах, за да вмъкна IF формула в клетка в последния ред, която оценява стойност в друга колона.

бързо:

  • Добавете идентификатора на вашата електронна таблица.
  • Добавете името на вашия лист.
  • Направих променлива за колоната, която ще оценявам, и колоната, в която ще добавя формулата. Може да имате нужда от това, а може и да не.
  • Използвайте .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