Checkbox 谷歌电子表格勾选框增量和时间驱动重置
我想在电子表格上使用勾选框功能;当在一天结束时勾选时,定义的单元格值将增加,勾选框将重置Checkbox 谷歌电子表格勾选框增量和时间驱动重置,checkbox,google-apps-script,google-sheets,increment,Checkbox,Google Apps Script,Google Sheets,Increment,我想在电子表格上使用勾选框功能;当在一天结束时勾选时,定义的单元格值将增加,勾选框将重置 function resetCells() { var ss = SpreadsheetApp.getActive() .getSheetByName('Lordaeron'); var cells = ['B2:B1000'] .map(function (c) { ss.getRange(c) .setValue("FALSE"); });
function resetCells() {
var ss = SpreadsheetApp.getActive()
.getSheetByName('Lordaeron');
var cells = ['B2:B1000']
.map(function (c) {
ss.getRange(c)
.setValue("FALSE");
});
}
这将重置带有时间触发器的复选框,我需要添加条件增量。如果B列值为TRUE,则C列值将在同一行中递增
例如:
首张>>
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 |
下面是示例基板
提前谢谢
==============================================
另外,我问如何将上限增加为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);
}
函数resetDaily(){
var ss=SpreadsheetApp.getActive().getSheetByName('Sheet');
var range=ss.getDataRange().offset(1,0,ss.getLastRow()-1);
var values=range.getValues().map(函数(e){
如果(数字(e[8])
resetCells()
安装为执行的时间触发器,如果在一天结束时选中了复选框。
。这由您自己完成
- 当运行
resetCells()
时,它会选中列“A”的所有复选框
- 如果某行的复选框为
false
,则对该行不执行任何操作
- 如果行的复选框为
true
,则对于该行,它将+6
添加到列“C”的值,并将+1
添加到列“D”的值。然后,它将该行的列“a”的值更改为false
如果我对你的情况和你想要的东西的理解是正确的,那么这次修改怎么样?我认为对你的情况有几个答案。所以请把这当作其中之一
修改点:
- 在脚本中,“A”列的所有值都更改为
false
。但无法检索原始值。因此,没有用于修改“C”列和“D”列的资料
- 此修改脚本的流程如下所示。
- 检索数据范围的所有值
- 修改值
- 使用修改后的值覆盖图纸
修改脚本:
请按如下方式修改您的脚本
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
的情况,我认为可以通过包含用于检查列“A”的值的脚本来降低流程成本
补充:
在此更新中,当列“C”的值为100时,脚本可以将该值更改为边界
函数resetCells(){
var ss=SpreadsheetApp.getActive().getSheetByName('Sheet');
var range=ss.getDataRange().offset(1,0,ss.getLastRow()-1);
var values=range.getValues().map(函数(e){
如果(数字(e[2])<100){//或者什么阻止了你?你需要。启动并发布你的代码。在你的脚本中,你似乎试图从B列检索复选框的值。但是在你的示例表中,它似乎被放在A列。如果你的脚本不是最新的,请修改它。为了正确理解你的情况,你能支持吗查看电子表格样本?当然,请删除您的个人信息。这是我尝试实现的简单基础。如果在一天结束时勾选了勾选框。出勤日将增加+1,作业分数将增加+6,勾选框将重置。感谢您的回复。我发布了一个答案,因为我认为我可以从您共享的电子表格和评论中了解您的情况。您能确认一下吗?如果我误解了您的要求,请告诉我。我想修改它。此代码包括我试图实现的所有内容。先生,非常感谢您的帮助和兴趣。我非常感谢。我最近注意到,这可能吗添加分配点的上限?例如,不超过100@Kutay感谢您的回复。我很高兴您的问题得到了解决。关于您的新问题,这是可能的。因此,我在我的回答中添加了更新的脚本。您能确认一下吗?我不确定您想要的规范。因此,请替换//做点什么
添加到您想要的脚本。@Kutay很抱歉。当您添加脚本时,是否可以将其添加到您的问题中?我已修复。很抱歉,我还不习惯stackoverflow。我还有更多问题,但我想我应该为它们创建新的线程。亲爱的先生,再次感谢您
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);
}