新しいSheetsとGoogle Apps Script

この記事はGoogle Apps Script Advent Calendar 2013で書こうと思ったけど、
間に合わなかった悲しい記事です。

# これから書くこと

新しくなったSheets(Google Spreadsheets)の機能をざっくり紹介するのと、
Google Apps Scriptに対する影響、新機能について書きたいと思います。

簡単にまとめると
※他にもあった気がします

* Sheets
   * 大量のデータが扱えるようになった(約5倍)
   * 大量のデータがあってもSheets操作時のパフォーマンスが __割と__ ましになった。
   * 書式設定が柔軟になった（Excelの様にある程度自由な設定が可能になった）
   * フィルタを設定していても他の人に影響を与えなくなった
      * 以前は一人がフィルタを設定すると他の人もフィルタが設定されている状態で見えていた（それはそれでありなんですけどね)
   * 条件付き書式設定で関数が使えるようになった。
   * 一つの条件付き書式で複数セルに設定が可能になった。
   * 関数がいくつか増えた。 & 関数を利用する際の補完が見やすくなった。
   * セルに幅を超えた文字数入力されていても折り返されなくなった
* Google Apps Script
   * 一部のSpreadsheetsApp関連の関数が非対応
   * バッチ操作(setValues)などの関数のパフォーマンスが悪くなっている
      * 検証は下の方に書いていますが、現状は100倍近くパフォーマンスが落ちています。
      * ただしこれはバッチ操作が現状新しいSheetsで対応されていないためで、対応がされれば解消される問題です。（近いうちにすると思います）
   * 新たに@coustomfunction jsdocアノテーションが増え、Sheets側で関数を補完する際に見えるようになった。

です。
なおGASの話は後半の方に書くので、GASしか興味ない方は下の方から読んでください。

# 新しいSheetsの登場

1年前にGoogle SpreadsheetsからGoogle Sheetsに改名されているのですが、
まだSpreadsheetsという名称のほうが多い気がしますね。

ということでSheetsが新しくなりました。

新しくなったのは以下。

## 大量のデータが扱えるようになった(約5倍)

扱えるデータ量、正確に言うとデータを入れておけるセルの量が最大5倍になりました。
もともとのSheetsでは1Sheets内での合計最大セル数が__400,000__個でしたが、
新しいシートでは __2,000,000__個になっています。

また元々はシート数、列数、数式数、特殊・複雑な関数(ImportXML等)の数に制限がありましたが、
新しいSheetsでは無くなっています。

詳しくは以下を見てみてください。
https://support.google.com/drive/answer/37603?hl=ja

## 大量のデータがあってもSheets操作時のパフォーマンスが __割と__ましになった。

扱える最大セル数が増えたのにも伴いますが、相当のデータがあっても、
Sheetsを開いたり、操作する際のパフォーマンス劣化が緩やかになりました。

それに伴ってか、Sheetsを新規作成した際の列、行数も
100行×20列から1000行×26列と大幅増量されています。

ただし、さすがに2,000,00セル全てにデータを入れていると重くなるようです。

## 書式設定が柔軟になった（Excelの様にある程度自由な設定が可能になった）

今までのSheetsでは予め用意されたセル書式しか扱うことができず、
自由なフォーマットでの書式設定が利用できませんでした。

新しいSheetsではかなり柔軟にフォーマットを設定可能です。(ほぼExcelと変わらないといっていいでしょう)

![スクリーンショット 2014-01-06 13.04.45.png](https://qiita-image-store.s3.amazonaws.com/0/2965/f82c2dd2-ee37-501e-9a33-87338e4044f1.png)
![スクリーンショット 2014-01-06 13.05.05.png](https://qiita-image-store.s3.amazonaws.com/0/2965/ff0d7071-845f-379e-3710-f774916a6638.png)

## フィルタを設定していても他の人に影響を与えなくなった

以前は一人がフィルタを設定すると他の人もフィルタが設定されている状態で見えていて、
他の人がフィルタを設定したせいで、自分にデータが一瞬存在しないように見えるみたいなことがあったのですが、
新しいSheetsではフィルタは操作をしている本人にのみ適用されるようになりました。
また、複数のフィルタ条件を名前付きで保存が可能になり、データ解析する際などに非常に有用になりました。

![スクリーンショット 2014-01-06 13.08.17.png](https://qiita-image-store.s3.amazonaws.com/0/2965/e32b8406-5fdb-9063-8f92-db343c588865.png)


## 条件付き書式設定で関数が使えるようになった。 & 一つの条件付き書式で複数セルに設定が可能になった。

今までは定義済みな条件付き書式のみしか使えなかったのですが、
Sheetsの関数を利用した条件付き書式が設定可能になりました。

また一つの条件で複数のセル(例えば一列)に書式の適用も可能になりました。

![スクリーンショット 2014-01-06 13.21.25.png](https://qiita-image-store.s3.amazonaws.com/0/2965/8933939b-438c-3056-3558-d85e7b25989b.png)

## 関数がいくつか増えた。 & 関数を利用する際の補完が見やすくなった。

関数がいくつか増え、更に関数を利用する際に説明文が細かくつくようになりました。
![スクリーンショット 2014-01-06 13.22.51.png](https://qiita-image-store.s3.amazonaws.com/0/2965/8e70b70e-6612-ac68-be3a-62753e12421e.png)

## セルに幅を超えた文字数入力されていても折り返されなくなった

個人的にかなり嬉しい改善ですが、
セルに幅を超えた文字数入力されていても折り返されなくなりました。
よくExcelからインポートした時に問題になっていた部分なので嬉しい限りです。

![スクリーンショット 2014-01-06 13.27.37.png](https://qiita-image-store.s3.amazonaws.com/0/2965/8dc2579e-dde1-72aa-62c7-a5250e0dccd2.png)


# GASと新しいSheets

上記の通り、比較的新しいSheetsは良い機能が多く、移行したいところなのですが、
GASで扱おうとするとまだ、サポートされてない部分があり、辛いところもあります。

殆どの内容は以下を御覧ください。
https://developers.google.com/apps-script/migration/sheets

## 一部のSpreadsheetsApp関連の関数が非対応 & バッチ操作(setValues)などの関数のパフォーマンスが悪くなっている

どっちもSheets自体がまだ対応していないため発生している問題です。
これらは多分これから解決するはずなので、今のところは注意しておけば良いかなと思います。


## 新たに@coustomfunction jsdocアノテーションが増え、Sheets側で関数を補完する際に見えるようになった。

Sheets側の更新に書いた、関数の説明がGASで作成した場合でも表示することが可能になりました。

例えば以下の様なCustom Functionを書きます。

```js:CustomFunction.gs
/**
 * 消費税を計算して、元値に追加して返却します。
 * @param {number} origin 元値
 * @return {number} 元値 + 消費税
 * @customfunction
 **/
function calcTax(origin) {
  return origin * 1.05;
}
```

すると以下の様に関数の説明が表示されます。

![スクリーンショット 2014-01-06 13.39.37.png](https://qiita-image-store.s3.amazonaws.com/0/2965/9074e017-8c1b-1a55-7f1b-6ae3652a9b90.png)

素敵すぎる( ｰ`дｰ´)ｷﾘｯ

後はこれを簡単に配布できる仕組があれば、超使えるのに...


# まとめ

ということで新しいSheetsについて書きました。
素敵な機能が増えてますね...
ただまだいくつかバグもあるようなので、ご利用はご自身の判断で