如何针对每个不同的范围多次简化我的 google 应用程序脚本 copy/pasted?
How can I simplify my google app script I copy/pasted multiple times for each of my different ranges?
我已经在 Whosebug 上搜索了解决方案,但没有成功。看来我不知道如何正确地“命名”我的问题...
我为我的 Google sheet 找到了两个功能,可以帮助我计算工作中的成功和失败。他们工作得很好。
plus1() 将 A1 中的值加 +1
function plus1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var yesCount = ss.getRange("A1");
var yesAdd = yesCount.getValue();
yesCount.setValue(yesAdd+1);
}
minus1() 对 A1 中的值减 1:
function minus1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var yesCount = ss.getRange("A1");
var yesAdd = yesCount.getValue();
yesCount.setValue(yesAdd-1);
}
我编辑了我的问题以进行澄清
我单独增加或减少单元格,而不是一次全部增加或减少。例如:今天早上我将 1 递增到单元格 A1。今天下午我将单元格 A1 减 3。
此外,我将这些脚本附加到带有 ui.createMenu.
的自定义菜单栏
我的问题: 我使用相同脚本的 6 倍,但范围不同:
1) plus1A() with Range A1
2) plus1B() with Range A2
3) plus1C() with Range A3
4) minus1A() with Range A1
5) minus1B() with Range A2
6) minus1C() with Range A3
我的问题:有没有办法简化脚本,这样我就不会得到 6 次相同的代码,只是范围不同?
非常感谢您抽出宝贵时间!
罗恩
您需要定义范围,获取范围值,遍历值,为每个值加一,然后将新值设置为您的初始范围,如下所示:
const plusOne = () => {
const range = "A1:A5";
const ss = SpreadsheetApp.getActiveSpreadsheet();
const yesRange = ss.getRange(range);
const yesValues = yesRange.getValues();
const newValues = yesValues.map(row => row.map(cell => +cell + 1));
yesRange.setValues(newValues);
}
已更新
根据您在下面的评论,使用参数:
const plusOne = range => {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const yesRange = ss.getRange(range);
const yesValues = yesRange.getValues();
const newValues = yesValues.map(row => row.map(cell => +cell + 1));
yesRange.setValues(newValues);
}
这将适用于单个单元格或一系列单元格
如果有帮助请告诉我。
我可能会将其设置为一个递增函数和一个单独的递减函数,并且只使用当前的活动范围。因此,您必须 select 您希望递增或递减的单元格,然后推送递增或递减
function increment() {
const ss = SpreadsheetApp.getActive();
ss.getActiveCell().setValue(ss.getActiveCell().getValue() + 1);
}
function decrement() {
const ss = SpreadsheetApp.getActive();
ss.getActiveCell().setValue(ss.getActiveCell().getValue() - 1);
}
如果像这样对常见的重复功能使用侧边栏,它比使用下拉菜单方便得多。
在 Windows 您可以使用 Autohotkey。
例如,使用此脚本,您可以通过单击 Alt+Numpad + 或 来增加或减少选定的单元格Alt+Nupmpad - 按钮分别为:
!NumpadAdd::
send ^c
sleep, 50
Clipboard := Clipboard + 1
send ^v
return
!NumpadSub::
send ^c
sleep, 50
Clipboard := Clipboard - 1
send ^v
return
如果您不介意有四个或六个或任意数量的独立函数,而您需要的只是让它们更简单,这里是可能的方法:
# six functions for custom menu
function a1_plus() { change('a1', 1) }
function a1_minus() { change('a1', -1) }
function a2_plus() { change('a2', 1) }
function a2_minus() { change('a2', -1) }
function a3_plus() { change('a3', 1) }
function a3_minus() { change('a3', -1) }
# inner function
function change(range, value) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getRange(range);
var v = r.getValue();
r.setValue(v + value);
}
我已经在 Whosebug 上搜索了解决方案,但没有成功。看来我不知道如何正确地“命名”我的问题...
我为我的 Google sheet 找到了两个功能,可以帮助我计算工作中的成功和失败。他们工作得很好。
plus1() 将 A1 中的值加 +1
function plus1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var yesCount = ss.getRange("A1");
var yesAdd = yesCount.getValue();
yesCount.setValue(yesAdd+1);
}
minus1() 对 A1 中的值减 1:
function minus1() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var yesCount = ss.getRange("A1");
var yesAdd = yesCount.getValue();
yesCount.setValue(yesAdd-1);
}
我编辑了我的问题以进行澄清 我单独增加或减少单元格,而不是一次全部增加或减少。例如:今天早上我将 1 递增到单元格 A1。今天下午我将单元格 A1 减 3。 此外,我将这些脚本附加到带有 ui.createMenu.
的自定义菜单栏我的问题: 我使用相同脚本的 6 倍,但范围不同:
1) plus1A() with Range A1
2) plus1B() with Range A2
3) plus1C() with Range A3
4) minus1A() with Range A1
5) minus1B() with Range A2
6) minus1C() with Range A3
我的问题:有没有办法简化脚本,这样我就不会得到 6 次相同的代码,只是范围不同?
非常感谢您抽出宝贵时间! 罗恩
您需要定义范围,获取范围值,遍历值,为每个值加一,然后将新值设置为您的初始范围,如下所示:
const plusOne = () => {
const range = "A1:A5";
const ss = SpreadsheetApp.getActiveSpreadsheet();
const yesRange = ss.getRange(range);
const yesValues = yesRange.getValues();
const newValues = yesValues.map(row => row.map(cell => +cell + 1));
yesRange.setValues(newValues);
}
已更新 根据您在下面的评论,使用参数:
const plusOne = range => {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const yesRange = ss.getRange(range);
const yesValues = yesRange.getValues();
const newValues = yesValues.map(row => row.map(cell => +cell + 1));
yesRange.setValues(newValues);
}
这将适用于单个单元格或一系列单元格
如果有帮助请告诉我。
我可能会将其设置为一个递增函数和一个单独的递减函数,并且只使用当前的活动范围。因此,您必须 select 您希望递增或递减的单元格,然后推送递增或递减
function increment() {
const ss = SpreadsheetApp.getActive();
ss.getActiveCell().setValue(ss.getActiveCell().getValue() + 1);
}
function decrement() {
const ss = SpreadsheetApp.getActive();
ss.getActiveCell().setValue(ss.getActiveCell().getValue() - 1);
}
如果像这样对常见的重复功能使用侧边栏,它比使用下拉菜单方便得多。
在 Windows 您可以使用 Autohotkey。
例如,使用此脚本,您可以通过单击 Alt+Numpad + 或 来增加或减少选定的单元格Alt+Nupmpad - 按钮分别为:
!NumpadAdd::
send ^c
sleep, 50
Clipboard := Clipboard + 1
send ^v
return
!NumpadSub::
send ^c
sleep, 50
Clipboard := Clipboard - 1
send ^v
return
如果您不介意有四个或六个或任意数量的独立函数,而您需要的只是让它们更简单,这里是可能的方法:
# six functions for custom menu
function a1_plus() { change('a1', 1) }
function a1_minus() { change('a1', -1) }
function a2_plus() { change('a2', 1) }
function a2_minus() { change('a2', -1) }
function a3_plus() { change('a3', 1) }
function a3_minus() { change('a3', -1) }
# inner function
function change(range, value) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var r = ss.getRange(range);
var v = r.getValue();
r.setValue(v + value);
}