Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 如何循环使用不同范围值的google脚本函数?_Google Apps Script_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google apps script 如何循环使用不同范围值的google脚本函数?

Google apps script 如何循环使用不同范围值的google脚本函数?,google-apps-script,google-sheets,google-sheets-formula,Google Apps Script,Google Sheets,Google Sheets Formula,我需要一些帮助来写一个谷歌脚本,而且我对这一切都很陌生。我试图寻找一些解决方案或方法来完成这个简单的脚本(ideia看起来很简单),但可能因为我还在学习基础知识,所以我迷路了 我有这个电子表格,我需要为电子表格中的每一列创建一个透视表(从B1;B75开始,到FE1;FE75结束)。我制作了一个简单的脚本,在一个定义的范围内做一个简单的透视表,但这里是真正的问题,我希望这个范围是可变的(做各种透视表,当一个转到下一列,然后再做另一个直到最后一列FE1;FE75),所以我不需要为每一列重复所有的例程

我需要一些帮助来写一个谷歌脚本,而且我对这一切都很陌生。我试图寻找一些解决方案或方法来完成这个简单的脚本(ideia看起来很简单),但可能因为我还在学习基础知识,所以我迷路了

我有这个电子表格,我需要为电子表格中的每一列创建一个透视表(从B1;B75开始,到FE1;FE75结束)。我制作了一个简单的脚本,在一个定义的范围内做一个简单的透视表,但这里是真正的问题,我希望这个范围是可变的(做各种透视表,当一个转到下一列,然后再做另一个直到最后一列FE1;FE75),所以我不需要为每一列重复所有的例程。 这是我得到的:

  function test92pivottable() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('B1:B75').activate();
  var sourceData = spreadsheet.getRange('B1:B75');
  spreadsheet.insertSheet(spreadsheet.getActiveSheet().getIndex() + 1).activate();
  spreadsheet.getActiveSheet().setHiddenGridlines(true);
  var pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  var pivotGroup = pivotTable.addRowGroup(2);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  var pivotValue = pivotTable.addPivotValue(2, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotGroup = pivotTable.addRowGroup(2);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Respostas ao formulário 1'), true);
  spreadsheet.getRange('C1:C75').activate();
  sourceData = spreadsheet.getRange('C1:C75');
  spreadsheet.insertSheet(spreadsheet.getActiveSheet().getIndex() + 1).activate();
  spreadsheet.getActiveSheet().setHiddenGridlines(true);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotGroup = pivotTable.addRowGroup(3);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotValue = pivotTable.addPivotValue(3, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotGroup = pivotTable.addRowGroup(3);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Respostas ao formulário 1'), true);
  spreadsheet.getRange('D1:D75').activate();
  sourceData = spreadsheet.getRange('D1:D75');
  spreadsheet.insertSheet(spreadsheet.getActiveSheet().getIndex() + 1).activate();
  spreadsheet.getActiveSheet().setHiddenGridlines(true);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotGroup = pivotTable.addRowGroup(4);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotValue = pivotTable.addPivotValue(4, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotGroup = pivotTable.addRowGroup(4);  
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Respostas ao formulário 1'), true);
  spreadsheet.getRange('E1:E75').activate();
  sourceData = spreadsheet.getRange('E1:E75');
  spreadsheet.insertSheet(spreadsheet.getActiveSheet().getIndex() + 1).activate();
  spreadsheet.getActiveSheet().setHiddenGridlines(true);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotGroup = pivotTable.addRowGroup(5);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotValue = pivotTable.addPivotValue(5, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotGroup = pivotTable.addRowGroup(5);  
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Respostas ao formulário 1'), true);
  spreadsheet.getRange('F1:F75').activate();
  sourceData = spreadsheet.getRange('F1:F75');
  spreadsheet.insertSheet(spreadsheet.getActiveSheet().getIndex() + 1).activate();
  spreadsheet.getActiveSheet().setHiddenGridlines(true);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotGroup = pivotTable.addRowGroup(6);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotValue = pivotTable.addPivotValue(6, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotGroup = pivotTable.addRowGroup(6);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Respostas ao formulário 1'), true);
  spreadsheet.getRange('G1:G75').activate();
  sourceData = spreadsheet.getRange('G1:G75');
  spreadsheet.insertSheet(spreadsheet.getActiveSheet().getIndex() + 1).activate();
  spreadsheet.getActiveSheet().setHiddenGridlines(true);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotGroup = pivotTable.addRowGroup(7);
  pivotTable = spreadsheet.getRange('A1').createPivotTable(sourceData);
  pivotValue = pivotTable.addPivotValue(7, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA);
  pivotGroup = pivotTable.addRowGroup(7);
  };
正如你所看到的,我发现的解决方法是重复特殊的程序,但改变

电子表格.getRange('C1:C75).activate()

sourceData=spreadsheet.getRange('C1:C75

数据透视组=数据透视表.addRowGroup(3

数据透视值=数据透视表。添加数据透视值(3, SpreadsheetApp.PivotTableSummarizeFunction.COUNTA)

数据透视组=数据透视表.addRowGroup(3

但这会让剧本变得巨大

如果我不清楚,我很抱歉。我习惯于在类似这样的论坛上查找答案,但我自己不会问这些问题


谢谢

这只是对您当前的问题的一般回答,即如何遍历不同的工作表和范围

function loopthroughfunctionwithdifferentrangevalues() {
  const ss=SpreadsheetApp.getActive();
  const rA=['A1:A75','B1:B75','C1:C75'];
  const sA=['Sheet1','Sheet2','Sheet3'];
  sA.forEach((sh,s)=>{
    let sheet=ss.getSheetByName(sh);
    rA.forEach((rg,r)=>{
      let rg=sheet.getRange(rg);
      let vals=rg.getValues();
        //Put code in here.
    })
  });
}
您可以使用类似这样的方法来迭代电子表格中的所有工作表,但每个工作表中的选定子集和某些范围除外

function loopthroughfunctionwithdifferentrangesandsheetsandexcludesomesheets() {
  const ss=SpreadsheetApp.getActive();
  const rA=['A1:A75','B1:B75','C1:C75'];
  const xA=['Sheet1','Sheet2','Sheet3'];//exclude these sheets
  const shts=ss.getSheets();
  shts.forEach((sh,s)=>{
    if(xA.indexOf(sh)==-1) {
      let sheet=ss.getSheetByName(sh);
      rA.forEach((rg,r)=>{
        let rg=sheet.getRange(rg);
        let vals=rg.getValues();
        //Put code in here.
      })
    }
  });
}

正如@Cooper所暗示的那样,您可以通过提取每个“工作表”的每个“范围”将要重复的指令来简化代码,您可以通过创建包含这些工作表和范围的文件并使用循环遍历所需的指令(创建透视表)来将这些指令转换为透视表


按照JavaScript数组官方文档提供的链接进行操作。

请在不使用activate方法的情况下重写代码。并解释如何处理透视表。您的电子表格图像可能也会有所帮助欢迎来到StackOverFlow请抓住这个机会,学习如何使用,还有@Cooper抱歉,看来我是在这里跳枪了!谢谢你的链接,我将编辑我的问题,并更清楚。如果不麻烦的话,你能告诉我你说的“激活方法”是什么意思吗?我真的以为我可以从谷歌脚本中复制粘贴代码就可以了。再次抱歉并感谢您提供的信息。首先通过创建宏来学习如何编写脚本的人倾向于过度使用activate方法,如您的示例
spreadsheet.getRange('B1:B75').activate()所示
Where作为那些先学习javascript,然后阅读google应用程序脚本文档来学习应用程序脚本的人,几乎从未使用过.activate()方法。