Google 脚本/js 脚本未更新当前值
Google Script / js script not updating current value
这是当前代码:
最后一个问题 --> 我如何将每一个结果都放在一个字符串中。 (访问登录截图)
var 结果应该是这样的:
尼克 | HUR-L2 |拉兰石 | 4564 + "\n" + 托比 | CRU-L1 |量体| 513 + "\n"
function Test() {
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet = sSheet.getSheetByName("Sheet1");
var lastRow = srcSheet.getLastRow();
for (var i = 2; i <= lastRow; i++) {
var val = srcSheet.getRange(i,13).getValue();
if (val == 1) {
var speech = srcSheet.getRange(i,4).getValue();
Logger.log(speech)
}
}
}
D
M
5
1
10
0
15
1
20
1
Execution log
5:47:46 PM Notice Execution started
5:47:46 PM Info 5.0
5:47:46 PM Info 15.0
5:47:46 PM Info 20.0
5:47:47 PM Notice Execution completed
您可以通过 getRange('your range').getValues()
一次获取所有 table 日期,然后以这种方式过滤:
const table = [ // just as an example
[1235, 1],
[4564, 0],
[452, 1],
[513, 1]
]
const values = table.filter(t => t[1] == 1).map(t => t[0])
console.log(values); // [ 1235, 452, 513 ]
对于您的情况,代码可以归结为:
function test() {
const sSheet = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = sSheet.getSheetByName("Refinery");
const table = srcSheet.getRange("D:M").getValues(); // use "D2:M" if you have a header
const values = table.filter(t => t[9] == 1).map(t => t[0]);
Logger.log(values); // [1235.0, 452.0, 513.0]
}
更新
如果您想要来自 C、D、E 的数据,您可以这样做:
const table = srcSheet.getRange("C:M").getValues(); // get a wider range
const values_C = table.filter(t => t[10] == 1).map(t => t[0]);
const values_D = table.filter(t => t[10] == 1).map(t => t[1]);
const values_E = table.filter(t => t[10] == 1).map(t => t[2]);
table
是来自给定范围 ("C:M") 的 table,其中 table[0][0]
是 C
,table[0][1]
是 D
,等等
filter()
部分从第 10 列中没有“1”的 table 行中删除(table[0][10]
是 M
)。
map()
部分从每一行中删除除一个单元格之外的所有单元格。
或(更高效但可读性较差的变体):
const [values_C, values_D, values_E] =
table.filter(t => t[9] == 1).map(t => [t[0], t[1], t[2]]);
这样你会得到一个array
。要获得 string
,您还需要一个步骤:
const values_C_string = value_C.join(", ") // [a,b,c] --> "a, b, c"
您可以这样链接这一步:
const values_C = table.filter(t => t[10] == 1).map(t => t[0]).join(", ");
这是当前代码: 最后一个问题 --> 我如何将每一个结果都放在一个字符串中。 (访问登录截图)
var 结果应该是这样的:
尼克 | HUR-L2 |拉兰石 | 4564 + "\n" + 托比 | CRU-L1 |量体| 513 + "\n"
function Test() {
var sSheet = SpreadsheetApp.getActiveSpreadsheet();
var srcSheet = sSheet.getSheetByName("Sheet1");
var lastRow = srcSheet.getLastRow();
for (var i = 2; i <= lastRow; i++) {
var val = srcSheet.getRange(i,13).getValue();
if (val == 1) {
var speech = srcSheet.getRange(i,4).getValue();
Logger.log(speech)
}
}
}
D | M | ||||||||
---|---|---|---|---|---|---|---|---|---|
5 | 1 | ||||||||
10 | 0 | ||||||||
15 | 1 | ||||||||
20 | 1 |
Execution log
5:47:46 PM Notice Execution started
5:47:46 PM Info 5.0
5:47:46 PM Info 15.0
5:47:46 PM Info 20.0
5:47:47 PM Notice Execution completed
您可以通过 getRange('your range').getValues()
一次获取所有 table 日期,然后以这种方式过滤:
const table = [ // just as an example
[1235, 1],
[4564, 0],
[452, 1],
[513, 1]
]
const values = table.filter(t => t[1] == 1).map(t => t[0])
console.log(values); // [ 1235, 452, 513 ]
对于您的情况,代码可以归结为:
function test() {
const sSheet = SpreadsheetApp.getActiveSpreadsheet();
const srcSheet = sSheet.getSheetByName("Refinery");
const table = srcSheet.getRange("D:M").getValues(); // use "D2:M" if you have a header
const values = table.filter(t => t[9] == 1).map(t => t[0]);
Logger.log(values); // [1235.0, 452.0, 513.0]
}
更新
如果您想要来自 C、D、E 的数据,您可以这样做:
const table = srcSheet.getRange("C:M").getValues(); // get a wider range
const values_C = table.filter(t => t[10] == 1).map(t => t[0]);
const values_D = table.filter(t => t[10] == 1).map(t => t[1]);
const values_E = table.filter(t => t[10] == 1).map(t => t[2]);
table
是来自给定范围 ("C:M") 的 table,其中 table[0][0]
是 C
,table[0][1]
是 D
,等等
filter()
部分从第 10 列中没有“1”的 table 行中删除(table[0][10]
是 M
)。
map()
部分从每一行中删除除一个单元格之外的所有单元格。
或(更高效但可读性较差的变体):
const [values_C, values_D, values_E] =
table.filter(t => t[9] == 1).map(t => [t[0], t[1], t[2]]);
这样你会得到一个array
。要获得 string
,您还需要一个步骤:
const values_C_string = value_C.join(", ") // [a,b,c] --> "a, b, c"
您可以这样链接这一步:
const values_C = table.filter(t => t[10] == 1).map(t => t[0]).join(", ");