2016-07-29 19 views
2

複数のシートにまたがる出席者から従業員IDを見つけようとしていて、タイムスタンプを1枚にしています。複数のシートから値を取得するGoogleシート

Googleシートには複数のシートがあります。勤務ごとに個別のシートがあります。Daily sheets

出席シートには2つの列があります。従業員のログインのすべての時刻を知るために、私は従業員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]]); 

注2次元アレイとgetValuessetValues作業が

WARNINGをすることを - いつものように、I/Oががかかります処理時間が余分にgetRange().XetValuesを呼び出すのを避けるために、このgoogle article about appscript best practicesがより詳細に入る。また、出席シートがたくさんある場合、それらを1つに集約することを検討することもできます。

ステップ4 - 適切なシートを取得

あなたは出席シートであるスプレッドシート内のシートを区別するために何らかの方法必要があります:

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

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

あなたのために働く魔法の正規表現思い付きますこれでフィルタリングされます。


希望と幸運を願っています!

関連する問題