Google apps script 使用按钮更改多个单元格的值

Google apps script 使用按钮更改多个单元格的值,google-apps-script,google-sheets,Google Apps Script,Google Sheets,首先,我想让你们知道我是一名机械工程师,对编码经验很少。我最近试着制作一个简单的电子表格来帮助我跟踪我工作区域的物品清单。我只是用不同尺寸的部件做同样的东西。我想制作一个电子表格,让我可以点击不同的按钮(指定一个尺寸),使我能够带走关于特定尺寸组件的库存。我现在拥有的是一个分配给图像的脚本,它完全符合我的要求,但我认为这不是最有效的方式 我找到了一些脚本示例,它将单元格范围定义为变量,然后减去一个,基本上复制了几次。我试过了 var cell=SpreadsheetApp.getActiveSh

首先,我想让你们知道我是一名机械工程师,对编码经验很少。我最近试着制作一个简单的电子表格来帮助我跟踪我工作区域的物品清单。我只是用不同尺寸的部件做同样的东西。我想制作一个电子表格,让我可以点击不同的按钮(指定一个尺寸),使我能够带走关于特定尺寸组件的库存。我现在拥有的是一个分配给图像的脚本,它完全符合我的要求,但我认为这不是最有效的方式

我找到了一些脚本示例,它将单元格范围定义为变量,然后减去一个,基本上复制了几次。我试过了 var cell=SpreadsheetApp.getActiveSheet().getRange(“B2:B8,B10,B12:B14”) 但我一直收到一个错误,说找不到范围。如果有办法压缩我所拥有的,我将不胜感激

   // define the cell to be incremented
  var cell = SpreadsheetApp.getActiveSheet().getRange("B2:B8");

  // get and set the cell value
  var cellValue = cell.getValue();
  cell.setValue(cellValue - 1);  // this increments by -1 but could be any number

  // define the cell to be incremented
  var cell = SpreadsheetApp.getActiveSheet().getRange("B10");

  // get and set the cell value
  var cellValue = cell.getValue();
  cell.setValue(cellValue - 1);  // this increments by -1 but could be any number

  // define the cell to be incremented
  var cell = SpreadsheetApp.getActiveSheet().getRange("B12:B14");

  // get and set the cell value
  var cellValue = cell.getValue();
  cell.setValue(cellValue - 1);  // this increments by -1 but could be any number

  // define the cell to be incremented
  var cell = SpreadsheetApp.getActiveSheet().getRange("B16:B17");

  // get and set the cell value
  var cellValue = cell.getValue();
  cell.setValue(cellValue - 1);  // this increments by -1 but could be any number

  // define the cell to be incremented
  var cell = SpreadsheetApp.getActiveSheet().getRange("B19");

  // get and set the cell value
  var cellValue = cell.getValue();
  cell.setValue(cellValue - 1);  // this increments by -1 but could be any number
} ```

您可以这样做,如果您可以通过为每个范围添加一个正确数量的参数来更改它们。我在函数中添加了一个表,供您使用。试着运行myfun()然后运行funtest(),你就会明白我的意思了

function myfun() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  sh.clearContents();//remove this for the real function
  var rgA=["B2","B3","B4","B5","B6","B7","B8","B10","B12","B13","B14","B16","B17","B19"];
  var inA=[1,1,1,1,1,1,1,1,1,1,1,1,1,1];
  if(arguments.length==inA.length) {inA=arguments;}
  rgA.forEach(function(r,i){sh.getRange(rgA[i]).setValue(sh.getRange(rgA[i]).getValue()+inA[i]);});  
} 

function funtest() {
  myfun(1,2,3,4,5,6,7,8,9,0,1,2,3,4);
}

使用范围而不是范围并执行循环
函数myFunction(){
var sheet=SpreadsheetApp.getActiveSheet();
var rangeList=sheet.getRangeList([“B2:B8”、“B10”、“B12:B14”]);

对于(var i=0;i将getvalue更改为GetValues)迭代单元格谢谢您指导我访问RangeList库。您提供的很好。
function myFunction() {
  var sheet=SpreadsheetApp.getActiveSheet();
  var rangeList = sheet.getRangeList(["B2:B8", "B10", "B12:B14"]);
  for(var i=0; i<rangeList.getRanges().length; i++){
    var range = rangeList.getRanges()[i];
    var rangeValues = range.getValues();
    for(var j=0; j<rangeValues.length; j++){
      rangeValues[j][0]=rangeValues[j][0]-1;
    }
    range.setValues(rangeValues);
  }
}