Как посчитать количество ячеек, содержащих заданный текст c, с помощью скриптов Google Sheet? - PullRequest
0 голосов
/ 18 февраля 2020

Как подсчитать количество ячеек, содержащих указанный c текст, используя скрипты листа Google?

В настоящее время я использую следующий скрипт для подсчета количества ячеек, содержащих указанный c текст, например, ячейки, которые содержат: «Завершено» или «Не завершено».

function COUNT_TEXT_ACROSS_SHEETS(sheetNames, range, text) {
  sheetNames = sheetNames.split(',');
  var count = 0;
  sheetNames.forEach(function(sheetName) {
    var sheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
    var values = sheet.getRange(range).getValues();
    values.forEach(function(row) {
      row.forEach(function(cell) {
        if (cell.indexOf(text) !== -1 ) count++;
      });
    });
  });
  return count;
};

В настоящее время скрипт считает обе ячейки, которые содержат текст «Завершено» и «Не завершено» способ изменить сценарий так, чтобы он учитывал только те ячейки, которые содержат полное слово «Complete», вместо того, чтобы считать ячейки, содержащие «Not Complete», поскольку в ячейке также содержится ключевое слово: «Complete»?

Пример использования текущего скрипта:

=COUNT_TEXT_ACROSS_SHEETS("Sheet1", "C1:C1000", "NOT COMPLETE")

Ответы [ 3 ]

2 голосов
/ 18 февраля 2020

Использование TextFinder класс.

Пример сценария:

/**
 * @customfunction
 * @return count of given text in spreadsheet
 * @param {string} text text to search
 * @param {boolean} mec whether to match entire cell
 * @param {boolean} mc whether to match case
 */
function COUNT_SS(text = 'NOT COMPLETE', mec = true, mc = true) {
  return SpreadsheetApp.getActive()
    .createTextFinder(text)
    .matchEntireCell(mec)
    .matchCase(mc)
    .findAll()
    .length;
}

Использование:

=COUNT_SS()
1 голос
/ 18 февраля 2020

Как насчет этого:

function COUNT_TEXT_ACROSS_SHEETS(sheetNames, range, text) {//text=['Complete','Not Complete']
  var nA=sheetNames.split(',');
  var tA=text.split(',');
  var count = 0;
  var cObj={};
  cObj[tA[0]]=0;
  cObj[tA[1]]=0;
  nA.forEach(function(name) {
    var sh=SpreadsheetApp.getActive().getSheetByName(name);
    var vA = sheet.getRange(range).getValues();
    vA.forEach(function(r) {
      r.forEach(function(c) {
        var idx0=c.indexOf(tA[0]);
        var idx1=c.indexOf(tA[1]);
        if(idx0!=-1 && idx1==-1)cObj[tA[0]]+=1;
        if(idx0!=-1 && idx1!=-1)cObj[tA[1]]+=1  
      });
    });
  });
  return Utilities.formatString('Count-%s:%s Count-%s:%s',tA[0],cObj[tA[0]],tA[1],cObj[tA[1]]);
};
0 голосов
/ 18 февраля 2020
=COUNTIF(Sheet1!C1:C1000;"=NOT COMPLETE")
...