Ich helfe Ihnen mit einer grundlegenden Gliederung, einigen Ratschlägen und einigen Ressourcen, um zu helfen, aber erwarten Sie nicht, dass ich das Ganze schreibe.
Schritt 1 - eine Möglichkeit, benutzerdefinierte Menü erstellen
Sie werden Sie in der Lage sein wollen Skript Zugriff aus der Tabelle. Sie können dies erreichen, indem Sie eine benutzerdefinierte Menüoption erstellen. Hier ist ein article by google on custom menus.
Obwohl Google den einfachen Auslöser onOpen
verwendet, habe ich installable triggers gefunden, um zuverlässiger zu sein.
Schritt 2 - Benutzereingabe
Es wäre schön, für die ID des Mitarbeiters gefragt werden und haben das Skript Arbeit es Magie Get. Hier ist eine article by google on dialogs and sidebars, die erläutert, wie Benutzereingaben für ein Skript erhalten.
Schritt 3 - Lesen und Schreiben von Daten aus der Tabelle
Sie spreadsheeet Daten mit dem SpreadsheetApp
zugreifen können. Wenn Sie Ihr Skript über ein benutzerdefiniertes Menü aufrufen, können Sie SpreadsheetApp.getActiveSpreadsheet
; Wenn Sie jedoch Ihren Code im Skript-Editor testen möchten, gibt es kein "aktives Arbeitsblatt", verwenden Sie stattdessen SpreadsheetApp.openById
.
Mit dem Zugriff auf die Tabelle, können Sie anrufen:
spreadsheet.getSheetByName("name").getRange(1, 1, 2, 2).getValues();
spreadsheet.getSheetByName("name").getRange(1, 1, 2, 2).setValues([[1, 2], [3, 4]]);
Beachten Sie, dass getValues
und setValues
Arbeit mit 2-dimensionalen Arrays
WARNUNG - Wie üblich, I/O eine Menge nimmt Verarbeitungszeit so vermeiden überflüssig Aufruf getRange().XetValues
, diese google article about appscript best practices geht ausführlicher. Wenn Sie eine Menge Anwesenheitslisten haben, sollten Sie auch überlegen, ob Sie diese zu einem zusammenfassen möchten.
Schritt 4 - Holen Sie sich die entsprechenden Blätter
Sie werden someway unterscheiden müssen, welche Blätter in der Tabelle sind Anwesenheitslisten:
function isAttendanceSheet(sheet) {
return /Magical regex/.test(sheet.getName);
}
var sheets = spreadsheet.getSheets().filter(isAttendanceSheet);
mit der magischen regex kommen, die für Sie arbeitet und das wird sie filtern.
Hoffe das hilft und viel Glück!
Ich denke, Sie müssen eine benutzerdefinierte Funktion dafür schreiben. Wenn die Gesamtmenge der Daten klein genug ist, um in den verfügbaren RAM zu passen, können Sie einfach alle Informationen in Javascript-Objekte/Arrays lesen und dann im richtigen Format in das Konsolidierungsblatt schreiben. – SpiderPig
@SpiderPig Benutzerdefinierte Blattfunktionen können keine Dienste verwenden, für die eine Authentifizierung erforderlich ist, da sie als anonymer Benutzer ausgeführt werden, z. B. der Dienst 'SpreadsheetApp'. Weitere Informationen finden Sie unter https://developers.google.com/apps-script/guides/services/authorization –