计算字符串在范围中出现的次数

时间:2016-12-11 17:36:03

标签: google-apps-script google-sheets

编程很新,经过多次搜索后卡住了。 我试图创建一个可以搜索特定列的Google脚本,并计算值' YES'或者' NO'出现在列中(之后它将根据这些数字行事)。

尝试了各种方法来做到这一点,但都失败了,我认为最接近的例子如下:

CREATE TABLE PROJECT
(PROJECT_ID CHAR(5) NOT NULL,
PROJECT_NAME CHAR(20),
PROJECT_TYPE CHAR(20),
START_DATE DATE,
END_DATE DATE,
PRIMARY KEY (PROJECT_ID));

CREATE TABLE HARDWARE
(HARDWARE_ID CHAR(5) NOT NULL,
HARDWARE_NAME CHAR(20),
PRIMARY KEY (HARDWARE_ID));

CREATE TABLE SOFTWARE
(SOFTWARE_ID CHAR(5) NOT NULL,
SOFTWARE_NAME CHAR(20),
PRIMARY KEY (SOFTWARE_ID));

CREATE TABLE STAFF
(STAFF_ID CHAR(5) NOT NULL,
STAFF_NAME CHAR(20),
JOB_TYPE CHAR(20),
JOB_GRADE CHAR(20),
PRIMARY KEY (STAFF_ID));

CREATE TABLE ASSIGNMENTS
(ASSIGNMENT_ID CHAR(5) NOT NULL,
PROJECT_ID CHAR(5),
STAFF_ID CHAR(5),
HARDWARE_ID CHAR(5),
SOFTWARE_ID CHAR(5),
PRIMARY KEY (ASSIGNMENT_ID),
FOREIGN KEY (PROJECT_ID) REFERENCES PROJECT(PROJECT_ID),
FOREIGN KEY (STAFF_ID) REFERENCES STAFF(STAFF_ID),
FOREIGN KEY (HARDWARE_ID) REFERENCES HARDWARE(HARDWARE_ID),
FOREIGN KEY (SOFTWARE_ID) REFERENCES SOFTWARE(SOFTWARE_ID));

正如您所知,脚本的目的是说明有多少未付账单,我通过电子邮件发送自己的结果,这是我现在可以考虑检查它的唯一方法! 我认为最好的方法可能是使用example.indexOf()方法,但总是产生' -1'。

2 个答案:

答案 0 :(得分:1)

方法getSheetValues返回一个 double 数组:一个数组,其中每个元素都是相应行中元素的数组。 例如,如果范围填充

1 2
3 4

你将获得[[1,2], [3,4]]。如果范围只有一列,如您的示例所示,此结构仍适用:

1
3

表示为[[1], [3]]

所以,你永远不会找到一个字符串"是"作为数组的元素,因为会有["YES"]。此外,indexOf用于查找某些值的第一个出现,而不是用于计算它们。以下是你如何计算它们:

var unpaid = values.reduce(function(a, b) {
  return a + (b[0] == 'YES' ? 1 : 0);
}, 0);

此处,a是计数器,最初设置为0. reduce方法遍历values数组,为其每个元素提供服务,例如["YES"]["NO"],作为参数b。当b[0]为"是"时,减少功能将1添加到计数器。

答案 1 :(得分:1)

使用我制作的代码。它完全符合您的需求:

示例数据:

Range Start: A5 (5,1)

enter image description here

function countRepitition() {

   var ss = SpreadsheetApp.openById("ENTER_SPREADSHEET_ID");
   var sheetname = ss.getSheetByName("ENTER_SHEET_NAME");

   var count = 0;
   var values = sheetname.getRange(5, 1, 9, 2).getValues(); //Start of Range (5,1) -> A5, End of Range (9,2) -> B9

   for (var row in values) {
     for (var col in values[row]) {

       if (values[row][col] == "YES") {
         count++; //increment count everytime we find the string 'YES' upon given range
       }

     }
   }

  Logger.log('count is '+ count); //print the valuoe of count in the Logs
}

这是控制台中的结果:

enter image description here

相关问题