Google 电子表格复选框增量和时间驱动重置
Google Spreadsheets tickbox increment and time-driven reset
我想在 spreadsheets 上使用复选框功能;当它在一天结束时被勾选时,定义的单元格值将增加并且复选框将重置。
function resetCells() {
var ss = SpreadsheetApp.getActive()
.getSheetByName('Lordaeron');
var cells = ['B2:B1000']
.map(function (c) {
ss.getRange(c)
.setValue("FALSE");
});
}
这会重置带有时间触发器的复选框我需要添加条件增量。如果 B columb 值为 TRUE C columb 值将在同一行中递增。
示例:
初始 Sheet >>
Checkbox | Value 1 | Value 2 |
-------------------------------
X | 1 | 0 |
V | 2 | 0 |
X | 3 | 1 |
V | 1 | 2 |
X | 2 | 3 |
一天后 [期望的结果] >>
Checkbox | Value 1 | Value 2 |
-------------------------------
X | 1 | 0 |
X | 3 | 1 |
X | 3 | 1 |
X | 2 | 3 |
X | 2 | 3 |
https://docs.google.com/spreadsheets/d/1khPC5r2p0b1srsEGka3fl-GAl6nHACaVR0Cf31cqA1o/edit?usp=sharing 这里是示例基础 sheet.
提前致谢
============================================= =
此外,我问了如何将上限添加为 100 以不达到特定数量。
感谢 Tanaike 我通过这段代码修复了问题:
function resetDaily() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
if (Number(e[8]) <= 94) {
return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
} else {
return e[0] ? [false, e[1], 100, Number(e[3]) + 1] : e;
}
});
range.setValues(values);
}
resetCells()
安装为执行 If tickbox is checked at the end of the day.
的时间触发器。这是自己做的。
- 当
resetCells()
为 运行 时,它会检查列 "A" 的所有复选框。
- 如果某行的复选框是
false
,则不对该行执行任何操作。
- 如果一行的复选框是
true
,对于该行,它将+6
添加到列"C"的值,并将+1
添加到列的值列 "D"。然后,它将行的 "A" 列的值更改为 false
.
如果我理解你的情况和你想要的是正确的,那么这个修改怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
修改点:
- 在您的脚本中,列 "A" 的所有值都更改为
false
。但无法检索原始值。所以没有修改列"C"和"D". 的资料
- 修改后的脚本流程如下。
- 检索数据范围的所有值。
- 修改值。
- 使用修改后的值覆盖 sheet。
修改后的脚本:
请按如下方式修改您的脚本。
function resetCells() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
});
range.setValues(values);
}
注:
- 如果经常出现"A"列的所有值都是
false
的情况,我认为可以通过包含检查[=64]列的值的脚本来降低处理成本=].
已添加:
在本次更新中,当"C"列的值为100时,脚本可以将值更改为边界。
function resetCells() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
if (Number(e[2]) < 100) { // or <= 100
return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
} else {
// do something
}
});
range.setValues(values);
}
我想在 spreadsheets 上使用复选框功能;当它在一天结束时被勾选时,定义的单元格值将增加并且复选框将重置。
function resetCells() {
var ss = SpreadsheetApp.getActive()
.getSheetByName('Lordaeron');
var cells = ['B2:B1000']
.map(function (c) {
ss.getRange(c)
.setValue("FALSE");
});
}
这会重置带有时间触发器的复选框我需要添加条件增量。如果 B columb 值为 TRUE C columb 值将在同一行中递增。
示例:
初始 Sheet >>
Checkbox | Value 1 | Value 2 |
-------------------------------
X | 1 | 0 |
V | 2 | 0 |
X | 3 | 1 |
V | 1 | 2 |
X | 2 | 3 |
一天后 [期望的结果] >>
Checkbox | Value 1 | Value 2 |
-------------------------------
X | 1 | 0 |
X | 3 | 1 |
X | 3 | 1 |
X | 2 | 3 |
X | 2 | 3 |
https://docs.google.com/spreadsheets/d/1khPC5r2p0b1srsEGka3fl-GAl6nHACaVR0Cf31cqA1o/edit?usp=sharing 这里是示例基础 sheet.
提前致谢
============================================= =
此外,我问了如何将上限添加为 100 以不达到特定数量。 感谢 Tanaike 我通过这段代码修复了问题:
function resetDaily() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
if (Number(e[8]) <= 94) {
return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
} else {
return e[0] ? [false, e[1], 100, Number(e[3]) + 1] : e;
}
});
range.setValues(values);
}
resetCells()
安装为执行If tickbox is checked at the end of the day.
的时间触发器。这是自己做的。- 当
resetCells()
为 运行 时,它会检查列 "A" 的所有复选框。 - 如果某行的复选框是
false
,则不对该行执行任何操作。 - 如果一行的复选框是
true
,对于该行,它将+6
添加到列"C"的值,并将+1
添加到列的值列 "D"。然后,它将行的 "A" 列的值更改为false
.
如果我理解你的情况和你想要的是正确的,那么这个修改怎么样?我认为您的情况有几个答案。所以请将此视为其中之一。
修改点:
- 在您的脚本中,列 "A" 的所有值都更改为
false
。但无法检索原始值。所以没有修改列"C"和"D". 的资料
- 修改后的脚本流程如下。
- 检索数据范围的所有值。
- 修改值。
- 使用修改后的值覆盖 sheet。
修改后的脚本:
请按如下方式修改您的脚本。
function resetCells() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
});
range.setValues(values);
}
注:
- 如果经常出现"A"列的所有值都是
false
的情况,我认为可以通过包含检查[=64]列的值的脚本来降低处理成本=].
已添加:
在本次更新中,当"C"列的值为100时,脚本可以将值更改为边界。
function resetCells() {
var ss = SpreadsheetApp.getActive().getSheetByName('Sheet');
var range = ss.getDataRange().offset(1, 0, ss.getLastRow() - 1);
var values = range.getValues().map(function(e) {
if (Number(e[2]) < 100) { // or <= 100
return e[0] ? [false, e[1], Number(e[2]) + 6, Number(e[3]) + 1] : e;
} else {
// do something
}
});
range.setValues(values);
}