首页 > 解决方案 > 如何创建 Google 脚本循环以激活和复制工作簿中每个选项卡中的数据

问题描述

我有一张电子表格,其中有 X 张(张数会不断变化)。每张表中的数据格式相同。我想创建一个宏来激活电子表格中的每个工作表,并将特定单元格中的数据提取到一个新工作表中(基本上我将每个工作表中的信息合并到一个地方)。我了解如何使用 激活工作表getSheetByName(),但工作表的名称和数量会定期更改。我希望创建一个执行以下操作的循环:

  1. 激活第一张纸。
  2. 将数据从该工作表中的几个单元格复制到“仪表板”工作表。
  3. 激活下一张纸。
  4. 将数据从该工作表中的几个单元格复制到“仪表板”工作表。
  5. 重复直到所有工作表都被审查。

我可以使用以下代码来激活下一张纸,但是如何制作一个在最后一张纸之后停止的循环?

  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getRange('A2').activate();
  var nextSheetIndex = spreadsheet.getActiveSheet().getIndex() + 1;
  if (nextSheetIndex > spreadsheet.getSheets().length) { nextSheetIndex = 1; }
  spreadsheet.setActiveSheet(spreadsheet.getSheets()[nextSheetIndex - 1], true);
  spreadsheet.getRange('A2').activate();
  nextSheetIndex = spreadsheet.getActiveSheet().getIndex() + 1;

任何提示将非常感谢!

标签: google-apps-scriptgoogle-sheets

解决方案


首先,您无需激活Sheet即可执行更改。由于您要遍历Sheeta 中的每个Spreadsheet,因此请使用该getSheets()方法检索 anArray实例Sheet

然后,Sheet使用您喜欢的循环(forfor...inforEach()等)对每个循环进行迭代,并且在循环的每次迭代期间,访问Range要从中提取数据的值 viagetRange(yourRangeReference).getValue()并将其复制到目标Sheet

如果您需要检查并考虑动态变化的工作表数量,迭代它们时,请getNumSheets()在每个迭代步骤中使用方法,如果其结果大于初始值,则访问push()此工作表,然后将其放入Array.

有用的链接

  1. 关于for循环的MDN 文档(最简单的);
  2. SpreadsheetApp 电子表格服务参考
  3. 扩展 Google 表格的开发人员指南;

推荐阅读