2016-07-29 30 views
2

Ich versuche, eine Mitarbeiter-ID aus der Anwesenheit zu finden, die mehrere Blätter umfasst und den Zeitstempel in ein einzelnes Blatt ziehen.Werte aus mehreren Blättern holen Google Blätter

Das Google-Blatt enthält mehrere Blätter. Für jeden Arbeitstag gibt es Einzelblätter: Daily sheets

Jedes Anwesenheitsblatt hat zwei Spalten. Um alle Zeiten des Logins des Mitarbeiters zu erfahren, möchte ich alle Vorkommnisse der Angestellten-ID aus allen Blättern zusammen mit ihrem Zeitstempel in das Konsolidierungsblatt ziehen: Consolidation sheet.

Ich habe eine ähnliche Sache in Excel getan und kann in Google-Blatt mit Google Apps-Skript durchgeführt werden.

Es wäre hilfreich, wenn jemand mich zu einer integrierten oder benutzerdefinierten Funktion in Google Tabellen führen könnte.

+0

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

+0

@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 –

Antwort

1

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!

Verwandte Themen