编程很新,经过多次搜索后卡住了。 我试图创建一个可以搜索特定列的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'。
答案 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)
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
}
这是控制台中的结果: