2016-07-29 64 views
2

我正在尝试从出席人数中找到一个员工ID,该ID跨越多个工作表并将时间戳记拉成一张工作表。从多个工作表中提取值Google工作表

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

每张出勤单有两列。为了知道员工登录的所有时间,我希望将所有工作表中的员工ID发生的所有事件以及时间戳记拉到合并表中:Consolidation sheet

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

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

+0

我想你将不得不为此编写一个自定义函数。如果数据总量足够小以适应可用的RAM,则只需将所有信息读取到javascript对象/数组中,然后以合适的格式将其写入合并表。 – SpiderPig

+0

@SpiderPig自定义工作表功能无法使用任何需要身份验证的服务,因为它们以匿名用户身份执行,例如SpreadsheetApp服务。有关详情,请参阅以下网址:https://developers.google.com/apps-script/guides/services/authorization –

回答

1

我会帮你提供一个基本的概要,一些建议和一些资源来帮助,但不要指望我写出整个事情。


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

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

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

第2步 - 获取用户输入

这将是很好的提示输入员工的ID,并有脚本的工作它的魔力。这里是一个article by google on dialogs and sidebars,讨论如何获得脚本的用户输入。

第3步 - 阅读并从电子表格数据写入

您可以用SpreadsheetApp访问spreadsheeet数据。从自定义菜单调用脚本时,可以使用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与2维数组

警告工作 - 像往常一样,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); 

有适合您的神奇的正则表达式来了,这将过滤它们。


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

相关问题