【问题标题】:Fetch values from multiple sheets Google sheets从多个工作表中获取值 Google 工作表
【发布时间】:2016-12-04 16:17:25
【问题描述】:

我正在尝试从跨越多张工作表的出勤中找到一个员工 ID,并将时间戳拉到一张工作表中。

Google 工作表中有多个工作表。每个工作日都有单独的工作表:

每个考勤表有两列。为了知道员工登录的所有时间,我想从所有工作表中提取所有出现的员工 ID 及其时间戳到合并表:。

我在 Excel 中做过类似的事情,猜测可以使用 Google Apps 脚本在 Google 表格中完成。

如果有人可以指导我使用 Google 表格中的内置或自定义功能,那将会很有帮助。

【问题讨论】:

  • 我猜你必须为此编写一个自定义函数。如果数据总量小到足以放入可用的内存中,您只需将所有信息读入 javascript 对象/数组,然后以正确的格式将其写入合并表。
  • @SpiderPig 自定义工作表函数不能使用任何需要身份验证的服务,因为它们以匿名用户身份执行,例如SpreadsheetApp 服务。有关详细信息,请参阅此:developers.google.com/apps-script/guides/services/authorization

标签: google-apps-script google-sheets


【解决方案1】:

我会为你提供一个基本的大纲、一些建议和一些资源来帮助你,但不要指望我会写出全部内容。


第 1 步 - 创建自定义菜单选项

您将希望能够从电子表格访问您的脚本。您可以通过创建自定义菜单选项来完成此操作。这是article by google on custom menus

虽然 google 使用简单的触发器 onOpen,但我发现 installable triggers 更可靠。

第 2 步 - 获取用户输入

如果提示输入员工的 ID 并让脚本正常运行,那就太好了。这是一个article by google on dialogs and sidebars,它讨论了如何获取用户对脚本的输入。

第 3 步 - 从电子表格中读取和写入数据

您可以使用SpreadsheetApp 访问电子表格数据。从自定义菜单调用脚本时,可以使用SpreadsheetApp.getActiveSpreadsheet;但是,如果您想在脚本编辑器中测试您的代码,则没有“活动电子表格”,因此请改用SpreadsheetApp.openById

通过访问电子表格,您可以调用:

spreadsheet.getSheetByName("name").getRange(1, 1, 2, 2).getValues();
spreadsheet.getSheetByName("name").getRange(1, 1, 2, 2).setValues([[1, 2], [3, 4]]);

请注意,getValuessetValues 可用于二维数组

警告 - 与往常一样,I/O 需要大量处理时间,因此请避免过度调用 getRange().XetValues,此 google article about appscript best practices 会更详细地说明。此外,如果您有很多考勤表,那么您可能需要考虑将它们压缩为一张。

第 4 步 - 获取相应的工作表

您需要以某种方式区分电子表格中的哪些工作表是考勤表:

function isAttendanceSheet(sheet) {
  return /Magical regex/.test(sheet.getName);
}

var sheets = spreadsheet.getSheets().filter(isAttendanceSheet);

想出适合你的神奇正则表达式,这将过滤它们。


希望这会有所帮助,祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多