2017年6月1日木曜日

スプレッドシートへの値書き込み

前回まででとりあえずURLからSpreadsheetを開くことができた。

前回までのおさらい
SpreadsheetApp.openByUrlに、アクセス対象のスプレッドシートのURLを渡して、Spreadsheetオブジェクトを得た。


さて、値を突っ込むのはどこからだろうと、Spreadsheetオブジェクトのドキュメントを眺めてみる。

パッと見たところ、それらしいMethodは存在しない。

ま、そりゃそうか。まだ対象物(シートとか位置とか)にたどり着いてないのに、いきなり値突っ込むものがあっても、そりゃどうなのって話よね。


ということで、以下推論を立ててドキュメントを探ってみることに。


  • Spreadsheetオブジェクトはスプレッドシートのファイル的扱い
  • ということは、次は対象シートのオブジェクトを得る必要がある
  • さらにそのシート内の場所に値を入れる指定をする


最初のは前回で取得できているものなので、2番目のシートから探ってみることに。


1. シートの取得

Spreadsheetオブジェクトのドキュメントを眺めると、そのままの名前のgetSheetsなるものを発見。

中身を見てみると...



なんかやだ...。
なんかっていうか、getActiveSpreadsheetとか噛んでるのがヤダ。
だってもうSpreadsheetオブジェクトは持ってるわけだし。

ということで、このサンプルは変えながら使わなきゃいけなそうということがよくわかりました。ありがとう。

でもまぁここまでの推論は正しそうな予感。
ReturnにSheet[]のオブジェクト配列を得ることができそう。


2. セルの値更新 (場所の指定)

取得することができそうな、Sheetオブジェクトのドキュメント内を漁ってみる。

clearとか、シート全体に対する処理で間接的にセルに影響はでそうになってきたね。
うんうん。

ただ、まだvalueをsetするようなMethodはでてこない。
代わりに目につくようになったRangeオブジェクト。

ということは、Rangeで範囲を取得して、そこに値をセットする構造と推測。

getRange(row, column)というイカにもなMethodがあるのでチラ見。


行(row)と列(column)を指定して、Rangeオブジェクトを取得して、普通に値の参照(getValues)してる雰囲気。よさげな感じ。


3. セルの値更新 (本体)

ということで、Rangeオブジェクトをさらにチラ見。
ようやく出会えたsetValue(value)。会いたかったよ。


サンプルはまたgetActiveSpreadSheet使っててアレだけど、まぁ使い方はわかった。
概ね予想通り。



んじゃ、前回までのプログラムと合わせて適当に実行してみるかな。
作ったコードは組み合わせだけど以下になったので参考まで。(URLは適宜変更ください)



 var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/xxxxxx');

 var sheet = ss.getSheets()[0];

 var cell = sheet.getRange("B2");
 cell.setValue(100);




指定したスプレッドシートのB列2行目に[100]が無事書き込まれました。
うんうん。素直でよろしい。


これで基本中の基本はわかってきた感じ。

んじゃ今度は当初目標設定にあるHTMLとこのプログラムを結びつけるところへいってみようかな。








スプレッドシートへのアクセス

とりあえず環境はできたので、実アクセスをしていこう。

公式のドキュメントは Spreadsheet Service にあったので、そこを読み解いていこう。

パッと見たところExcelのCOMのような感じではあるけど、Sheetの中身はRangeで指定してアクセスする、って感じに見受けられる。どうなんだろ。やっていくうちにわかるか。

1. 最初のクラス

とりあえず重要そうな、というか最初に必要になりそうなのはSpreadsheetAppSpreadsheetあたりかな。

英文の説明からざっくりとした把握だと以下みたいな感じかな。

  • SpreadsheetApp
    • スプレッドシートを作ったり、開いたりするのに使う
  • Spreadsheet
    • スプレッドシートへアクセスして編集するのに使う



まずは対象を開けなきゃ始まらない、ということでSpreadsheetAppから見てみる。

中にはcreateとかopenとか、いかにもなMethodが準備されてて安心。
とりあえずcreateは後回しにして、まずはopenから掘り下げようかな。


2. ファイルを開きたいのです。オープン!

openと名前がついているMethodには3種類あるみたい。
名前のままだけど以下意味の様子。


  • open(file)
    • fileオブジェクトを渡して開く
  • openById(id)
    • Idを指定して開く
  • openByUrl(url)
    • Urlを指定して開く



GASはじめたばかりなので、fileオブジェクトもIdも現時点では意味不明。
まぁどこからか取得したりするんだろうけど、いったん放置で、わかりやすそうなUrlから手を出してみるかね。


 
 // The code below opens a spreadsheet using its id and logs the name for it.
 // Note that the spreadsheet is NOT physically opened on the client side.
 // It is opened on the server only (for modification by the script).
 var ss = SpreadsheetApp.openByUrl(
     'https://docs.google.com/spreadsheets/d/abc1234567/edit');
 Logger.log(ss.getName());
 
3. openByUrl - URLからスプレッドシートを開く

公式ドキュメント(openByUrlのAPI説明)が超丁寧。
サンプルまでついてて、しかもコピー機能までついてるとか。神か。

とりあえず作成していたスクリプトのmyFunction内にサンプルをペタリ。
URL部分だけ、自分のドライブ内のスプレッドシートのURLに置き換える。

再生ボタンっぽいのを押して実行してみる。

ログが出てるらしいがどこだ...と思ったら[表示]-[ログ]で確認できました。
ちょっとログの操作性は微妙だな...



特に苦労することもなく、まぁ普通の感じ。
普通のファイル処理プログラムと同じ流れで、開いて更新して保存する、って流れになるのかと勝手に予想してみる。


次回はこれに値突っ込んでいってみるかな。




 
 // The code below opens a spreadsheet using its id and logs the name for it.
 // Note that the spreadsheet is NOT physically opened on the client side.
 // It is opened on the server only (for modification by the script).
 var ss = SpreadsheetApp.openByUrl(
     'https://docs.google.com/spreadsheets/d/abc1234567/edit');
 Logger.log(ss.getName());
 



スプレッドシートへのアクセス準備

スプレッドシートアクセスするスクリプトの準備

1. [新規作成]からGoogle Apps Scriptを作成

とりあえずまずはスクリプトを作成する。




 2. スクリプト編集画面


作成すると自動でスクリプト編集が別タブで開いてくれる。
こんな感じ。
[無題のプロジェクト]を変更し、適当に名前を付けて保存する。



3. スプレッドシートを使えるように設定

[リソース]から[Google の拡張サービス...]を選択する。
表示されるダイアログの中から[Google Sheets API]を見つけて、ONに変更する。
(ちょっとONの部分が崩れてますが...私の環境だけ??)





ここまでは定型の手順のまとめ。
GoogleからAPIが色々提供されていて、かなりのことができそうな予感はする。

2017年5月29日月曜日

当面の目標 - Google スプレッドシートへのデータ挿入

まずは当面の目標を設定する。

GASにて何が可能か、どこに可能性があるのか完全な手探りなので、とりあえず最初はビジネスで活用のシーンが多そうな[Google スプレッドシート]から手を出そう。

当面の目標
[Google スプレッドシート]に対し、データを挿入するScriptを生成。
同じくHTML FormをGASで準備して、同ScriptをCall。
共有したHTMLページから[Google スプレッドシート]へデータが挿入される。

という、一連の動作を実装してみる。

想定シーン
まぁ最初なので、社内のシステムなどで、業務日報とか、売上管理とか、そういったデータを所定のフォームで入力し、履歴を保存しておく。みたいな。
そういった一連の動きを、社内PCとかのリソースを使うことなく、すべてGoogleのサービスで賄うことができれば、省エネが実現できるかなと。

ついでに、保存された[Google スプレッドシート]が共有されていれば、Excelとかに出力して活用したり、色々捗るかな。


まずは使用開始

Google Apps Script(GAS)を利用開始するには、Google Driveから。

Google Driveにアクセスし、[新規]から[その他]とポインティング。

表示されたサブメニューにGASの項目がなければ、[+ アプリを追加]。
表示されたアプリ一覧から[Google Apps Script]を[接続]する。

[新規]-[その他]-[Google Apps Script]を選択することで、新規のScriptを編集するエディタが無事起動する。

Google Drive内にデータが作成され、保存できる。


本ブログについて

Google Apps Script(GAS)について、学んでいこうと思い立った。

学んでいった経過をBlogにまとめてみたらどうだろうと思いついた。

Google Serviceを学ぶなら、BlogもGoogleのものを使ってみようとBloggerのページを作ってみた。

ビジネスのシーンでGASは活用できるのか。
それはお金を生むか。
その可能性を模索する。