Loops 在几列上循环

Loops 在几列上循环,loops,google-sheets,range,google-sheets-api,Loops,Google Sheets,Range,Google Sheets Api,从谷歌表单开始 我成功创建了我需要的功能: function happy() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('C5').activate(); spreadsheet.getCurrentCell().setFormula('=G4'); spreadsheet.getRange('H4').activate(); var current_e15=spreadsheet

从谷歌表单开始

我成功创建了我需要的功能:

function happy() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('C5').activate();
  spreadsheet.getCurrentCell().setFormula('=G4');
  spreadsheet.getRange('H4').activate();
  var current_e15=spreadsheet.getRange('E15').getValue();
  spreadsheet.getCurrentCell().setValue(current_e15);



  spreadsheet.getRange('C5').activate();
  spreadsheet.getCurrentCell().setFormula('=G5');
  spreadsheet.getRange('H5').activate();
  var current_e15=spreadsheet.getRange('E15').getValue();
  spreadsheet.getCurrentCell().setValue(current_e15);

  ...
  ...
  ...
函数从G[i]列读取,将其分配给C5,读取E15中新值产生的结果,并将该值放入单元格H[i]

显然,这可以通过i上的一个循环来完成,而不是复制经过这个相同的块并通过G5改变G4,通过H5改变H4等等

我只是不知道用这种语言怎么说

我试过这个显然不起作用

function happyloop() {
  var spreadsheet = SpreadsheetApp.getActive();

  var CellsG = spreadsheet.getRange('G4:G15');
  var CellsH = spreadsheet.getRange('H4:H15');
  for (var i = 0; i < CellsG.length; i++) {
    spreadsheet.getRange('C5').activate();
    spreadsheet.getCurrentCell().setFormula('=CellsG[i]');
    spreadsheet.getRange(CellsH[i]).activate();
    var current_e15=spreadsheet.getRange('E15').getValue();
    spreadsheet.getCurrentCell().setValue(current_e15);
 }

};
函数happyloop(){ var电子表格=SpreadsheetApp.getActive(); var CellsG=spreadsheet.getRange('G4:G15'); var CellsH=spreadsheet.getRange('H4:H15'); 对于(变量i=0;i 我很高兴能得到帮助,了解如何在谷歌工作表语言中正确使用这个函数


谢谢你的帮助:)

我终于找到了有效的方法

function happyloop() {
  var spreadsheet = SpreadsheetApp.getActive();

  var CellsG = spreadsheet.getRange('G4:G15');
  var CellsH = spreadsheet.getRange('H4:H15');
  for (var i = 0; i < CellsG.length; i++) {
    spreadsheet.getRange('C5').activate();
    spreadsheet.getCurrentCell().setFormula('=CellsG[i]');
    spreadsheet.getRange(CellsH[i]).activate();
    var current_e15=spreadsheet.getRange('E15').getValue();
    spreadsheet.getCurrentCell().setValue(current_e15);
 }

};
如果有更优雅的方法,请纠正我。 多谢各位

function happyloop() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheets()[0];
  for (var i = 4; i < 16; i++) {
    sheet.getRange('C5').activate();
    var current_Gi=sheet.getRange(i,7).getValue();
    sheet.getCurrentCell().setValue(current_Gi);
    sheet.getRange(i,8).activate();
    var current_e15=sheet.getRange('E15').getValue();
    sheet.getCurrentCell().setValue(current_e15);
  }
 }
函数happyloop(){ var电子表格=SpreadsheetApp.getActive(); var sheet=spreadsheet.getSheets()[0]; 对于(变量i=4;i<16;i++){ sheet.getRange('C5').activate(); var current_Gi=sheet.getRange(i,7).getValue(); sheet.getCurrentCell().setValue(当前值); sheet.getRange(i,8.activate(); var current_e15=sheet.getRange('e15').getValue(); sheet.getCurrentCell().setValue(当前值); } }
我接受了您的工作答案,并根据您的要求对其进行了细微更改,以实现更优雅的方式。原始脚本运行时间为4.5秒,而此修改版本运行时间为2.5秒。这是优化版本:

function happyLoop() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheets()[0];
  var C5 = sheet.getRange('C5');
  var E15 = sheet.getRange('E15').getValue();
  for (var i = 4; i < 16; i++) {
    C5.setValue(sheet.getRange(i, 7).getValue());
    sheet.getRange(i, 8).setValue(E15);
  }
}
函数happyLoop(){ var电子表格=SpreadsheetApp.getActive(); var sheet=spreadsheet.getSheets()[0]; var C5=表。getRange('C5'); var E15=sheet.getRange('E15').getValue(); 对于(变量i=4;i<16;i++){ C5.setValue(sheet.getRange(i,7.getValue()); 表.getRange(i,8).设置值(E15); } } 我更改了变量名以使其更清晰,但这并不能提高速度。为了获得更高的速度,我去掉了
for
循环中所有不依赖于
I
迭代器的内容。还要注意我是如何嵌套每个方法调用的


为了进一步改进这段代码,我必须理解您最初的场景。一个可能的改进是在完整的代码中只使用一次,因为它是最慢的方法,在这里它在每次迭代中都会被调用。最后,我想和大家分享一下。请不要犹豫,请向我寻求更深入的澄清。

酷!非常感谢你。E15不能从循环中取出,因为它是每次我更新C5时更新的值,这是我要在每个H[I]中写入的E15的更新值序列。但是是的,C5确实可以去掉。谢谢同时感谢您的链接:)