Scriptで社内勤務時間管理システム作ったので便利だったものを備忘録代わりに挙げるこの広告は、90日以上更新していないブログに表示しています。Scriptで社内勤務時間管理システム作ったので便利だったものを備忘録代わりに挙げるWEBツールどうも!巷ではMacbookチルドレン第一号と言われている19歳のFwww(ふうや)です(((((((((((っ・ω・)っ9月から地元の動画メディアを運営している会社でバイトさせてもらってます。勤務時間は専用の紙に書いて申告するという形態でした。Script(以後GASと略します)とスプレッドシートを連携させて勤務時間管理システムを開発しました。開発時間は10時間ほどと少し時間はかかったものの次のようなことができるシステムを作り上げました。計算して行ったタスクを記述して(働いた日だけ抜き取る)、それぞれのシートを社長にエクセル形式でメールで送信ざっくり言えばこれだけのことですが、社長からすれば月初めに紙に書かれた勤務時間を合算して計算する作業を短縮できるので結構喜んでいただいてます。こんな話は置いといて、GASを利用したに当たって便利だった関数や処理等を紹介させていただきます。}GASの中で内部扱いのウェブアプリケーションを立ち上げる場合は既定のdoGet()関数を利用します。上記のようなコードだとpage.htmlをウェブアプリケーションとして開くようになります。常に最新のコードでテストしたい場合は「公開→ウェブアプリケーションとして導入→最新のコード」で行えます。セルに値を挿入するSpreadsheetApp.getActiveSheet().getRange('A1').setValue("あいうえお");次のように処理すればA1にあいうえおという文字列を挿入することが出来ます。変数を利用したい場合は次のようにします。"あいうえお";SpreadsheetApp.getActiveSheet().getRange('A'+i).setValue(text);こうすれば前者と同じ処理を行えます。SpreadsheetApp.getActiveSheet().getLastRow();通常はこんな処理でデータが記入されている最終行を取得することが出来るのですが、GAS付属の関数を使いすぎると重くなるため、jsでデータが記入されている最終行を取得する方法も書いておきます。}この処理の場合だとA行と指定してデータが記入されている最終行を種痘することが出来ます。month+'月'+day+'日'+'('+dayOfWeekStr+')';このようにすると、day_and_daynameを出力した時は次のような形になります。10月12日(木)その日の日付を毎日挿入したい場合はトリガーを設定するといいですね。内部ウェブアプリケーションからgsファイルの関数を実行するgoogle.script.run.withSuccessHandler().fn();このような場合はfnという関数を内部ウェブアプリケーションから実行することが出来ます。引数も渡すことが出来るため便利ですよね!私はjQueryを内部ウェブアプリケーションで読み込んである要素がクリックされたときなんかにgsファイルの関数を実行するようにしています。内部アプリケーションからgsファイルの関数を引数付きで数字を受け取ったときは文字列となっているので、引数を使って演算を行う場合は次のように数字に変換する必要があります。Number(hikisu);あるセルに値があるかどうか判定するとき先述したコードを利用して次のようにセルに値があるかどうか判定することが出来ます。if(SpreadsheetApp.getActiveSheet().getRange('A1').getValue()){//値があるとき}else{//値がなかったとき}要は指定したRange(セル)でgetValue(値をゲット)できるかどうかってことです。関数の中で関数を実行するこれはどの言語でも当たり前のことですがまれに悩まされる人を見かけるので書いておきます。fn(hikisu);この場合fnという関数にhikisuという引数付きで実行させることが出来ます。セルを範囲指定するgetRangeを使えば一つのセルだけでなく範囲指定してセルを指定することが出来ます。2)//A1:B3を指定セルを範囲指定して一気に値をゲットするセルを範囲指定した場合はgetValueではなくgetValuesを利用します。SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1:B3").getValues();このようにすればA1からA3までの値を一気にgetValues(ゲット)できます。※getValuesした値は連想配列になっているので注意が必要ですセルを範囲指定して一気に値をセットするこの場合はsetValueではなくsetValuesを利用します。values.push([value[i]]);}すでにvalueという配列が存在する場合上記コードを利用して連想配列化させることが出来ます。セルの値を削除するセルの値を削除したいときよくあります笑そんなときはこうします。SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getRange("A1:A3").clear();このように範囲指定してセルの値を一気に削除させることが出来ま。すもちろん単一のセルを削除させることも出来ますよ。シートを作成する様々なデータをスプレッドシートで扱う場合は新たなシートをよく作成すると思います。SpreadsheetApp.getActiveSpreadsheet().insertSheet("シート2");上記コードの場合シート2を作成することができます。※自動的にアクティブシートになるので注意が必要シートを削除する一時的な処理の場合シートを削除することがあります。SpreadsheetApp.getActive().deleteSheet(sheet2);ちょっと面倒な書き方になりますが上記のようにしてシート2を削除させることが出来ます。アクティブシートを変更する2つ以上のシートを扱うようなプログラムだとアクティブシートを変更しないと予期しない結果が生まれてしまいます。SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1");SpreadsheetApp.setActiveSheet(set_sheet);このようにすればシート1をアクティブシートに変更できます演算してセルに時間形式の値が挿入されてしまった演算した結果をセルに表示させた場合極稀に0:00のように時間形式の値が挿入されてしまう場合があります。今回の開発でもこの現象に遭遇して無事に解決できたのでメモしておきます。setNumberFormat("0")setValueまたはsetValuesの手前に上記のようなコードを差し込むことで書式設定を行い正常に表示させるようにできます。小数点を表示させたい場合は0.00のように手動で設定する必要があるので注意が必要です。メールを送信するトリガーなんか利用してメールを送信する場合があります。"メールの内容です");次のような形でメールを送信することが可能です。メールの送信元はスプレッドシートでログインしているGoogleアカウントになりますスプレッドシートをエクセル形式に変換バックアップのためにスプレッドシート(全シート)をエクセル形式に変換する時があります。"&exportFormat=xlsx";UrlFetchApp.fetch(fetchUrl).getBlob().setName("ファイル名.xlsx");特定シートをエクセル形式に変換するメールなんかで特定シートのみエクセル形式に変換して送る場合があります。"&exportFormat=xlsx&gid="+sheetId;UrlFetchApp.fetch(fetchUrl).getBlob().setName("ファイル名.xlsx");処理としてはスプレッドシートのフィールドIDを取得(先程と同様)し、シートIDを取得。"メールの内容です",{attachments:fetch});メールでファイルを添付する場合はsendEmail関数のオプションで{attachments:フェッチさせたもの}を指定する必要があります。おまけ:GASでAjaxGASではjsのXMLHttpRequestオブジェクトを生成することができません。UrlFetchApp.fetchを利用します。・_・)==○ポケモン図鑑ジェネレーターを2日かけて作ったよ!!Wordpress上でajax経由で関数をactionさせる時はadmin-ajax使うといいよ!月別アーカイブはてなブログをはじめよう!fwwwさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。