[Google Sheets API] セルに書式を設定する

Google Sheets API v4（Java）を使用して、
スプレットシートのセルに書式を設定する場合、設定可能な内容
についてご紹介します。

セルの書式はCellFormatクラスで指定できますが、
ここでは指定可能な内容のみを記事にしています。

:::note info
実際に使用したい場合は下記の記事と合わせてご覧ください。
[⧉[Google Sheets API] セルの内容(値、メモ、リッチテキスト、表示形式(書式)、ピボットテーブル、入力規則)を設定する](https://qiita.com/doran/items/d4e048fc41b4132a4b44)
:::

:::note info
その他のGoogle Sheets APIは、下記の記事を参照ください。
[⧉[Google Sheets API] JavaでスプレットシートのメニューとAPIを関連づけてみた](https://qiita.com/doran/items/2f6f8932b994fbd1a170)
:::

|No|目次|
|---|---|
|0|[設定できる内容](#0-設定できる内容)|
|1|[塗りつぶしの色](#1-塗りつぶしの色)|
|2|[枠線](#2-枠線)|
|3|[表示形式  数字](#3-表示形式--数字)|
|4|[表示形式  テキスト](#4-表示形式--テキスト)|
|5|[表示形式  水平方向配置](#5-表示形式--水平方向配置)|
|6|[表示形式  垂直方向配置](#6-表示形式--垂直方向配置)|
|7|[表示形式  ラッピング](#7-表示形式--ラッピング)|
|8|[表示形式  回転](#8-表示形式--回転)|
|9|[余白](#9-余白)|
|10|[テキストの方向](#10-テキストの方向)|
|11|[ハイパーリンク](#11-ハイパーリンク)|

## 0. 設定できる内容
CellFormatクラスで下記の内容が設定できます。
直感的にわかるようにスプレットシートのメニューと対応させました。
|メニュー|内容|設定するメソッド|
|---|---|---|
|ツールバー|[塗りつぶしの色](#1-塗りつぶしの色)|setBackgroundColor<br>または<br>setBackgroundColorStyle|
|ツールバー|[枠線](#2-枠線)|setBorders|
|メニューバー|[表示形式  数字](#3-表示形式--数字)|setNumberFormat|
|メニューバー|[表示形式  テキスト](#4-表示形式--テキスト)|setTextFormat|
|メニューバー|[表示形式  水平方向配置](#5-表示形式--水平方向配置)|setHorizontalAlignment|
|メニューバー|[表示形式  垂直方向配置](#6-表示形式--垂直方向配置)|setVerticalAlignment|
|メニューバー|[表示形式  ラッピング](#7-表示形式--ラッピング)|setWrapStrategy|
|メニューバー|[表示形式  回転](#8-表示形式--回転)|setTextRotation|
|なし|[余白](#9-余白)|setPadding|
|なし|[テキストの方向](#10-テキストの方向)|setTextDirection|
|なし|[ハイパーリンク](#11-ハイパーリンク)|setHyperlinkDisplayType|

以下に表中の操作について一つずつ説明していきます。

なお、サンプルコード内の変数「format」は、
CellFormat format = new CellFormat();
とします。
### 1. 塗りつぶしの色
セルの塗りつぶしの色を指定できます。
引数は、RGBの指定で0.0〜1.0で指定します。
```
Color color = new Color();

color.setRed(1f);   //R(レッド)
color.setGreen(0f); //G(グリーン)の指定
color.setBlue(0f);  //B(ブルー)の指定

format.setBackgroundColor(color);
```
### 2. 枠線
セルの枠線を指定できます。

枠線はスタイル、太さ、色、枠線を引く位置(上下左右)が指定できます。
枠線の引く位置は上下左右それぞれでスタイル、太さを指定できます。

枠線のスタイルで指定できるのは下記です。
・　点線(DOTTED)
・　破線(DASHED)
・　細い実線(SOLID)
・　中位の実線(SOLID_MEDIUM)
・　太い実線(SOLID_THICK)
・　2本の実線(DOUBLE)
```
Border border = new Border();

border.setStyle("DOTTED");   //枠線のスタイル(ここでは点線を指定)
border.setWidth(2);          //枠線の太さ

//枠線の色
Color borderColor = new Color();
borderColor.setRed(0f);
borderColor.setGreen(1f);
borderColor.setBlue(0f);
border.setColor(borderColor);

//枠線を引く位置(上下左右)
Borders borders = new Borders();
borders.setTop(border);      //上の枠線
borders.setBottom(border);   //下の枠線
borders.setLeft(border);     //左の枠線
borders.setRight(border);    //右の枠線

format.setBorders(borders);
```
### 3. 表示形式  数字
セル内の表示形式を指定できます。
書式のタイプとパターンを設定して表示形式を指定します。

下記に指定可能な書式タイプを示します。
|type|種類|
|---|---|
|TEXT|テキストの書式設定|
|NUMBER|数値の書式設定|
|PERCENT|パーセントの書式設定|
|CURRENCY|通貨の書式設定|
|DATE|日付の形式|
|TIME|時刻の書式設定|
|DATE_TIME|日付+時刻の書式設定|
|SCIENTIFIC|科学的な数値の書式設定|

下記表は、スプレットシートのメニューバー「表示形式-数字」で選択可能な項目です。
typeとpatternを下記表のように指定すると、表示されたメニューにチェックがつきます。
（下記表のpatternで「mm:ss」の前に空白がありますが実際には不要です。）
|メニュー||type|pattern|
|---|---|---|---|
|書式なしテキスト||TEXT||	
|数値|1,00.12|NUMBER|#,##0.00|
|パーセント|10.12%|PERCENT|0.00%|
|指数|1.01E+03|SCIENTIFIC|0.00E+00|
|会計|¥(1,000.12)|NUMBER|_([$¥-411]* #,##0.00_);_([$¥-411]* \\(#,##0.00\\);_([$¥-411]* \"-\"??_);_(@_)|
|会計|(1,000.12)|NUMBER|#,##0.00;(#,##0.00)|
|通貨|¥1,000.12|CURRENCY|[$¥-411]#,##0.00|
|通貨（端数切り捨て）|¥1,000|CURRENCY|[$¥-411]#,##0|
|日付|2008/09/26|DATE|yyyy/MM/dd|
|時間|15:59:00|DATE|H: mm:ss|
|日時|2008/09/26 15:59:00|DATE_TIME|yyyy/MM/dd H: mm:ss|
|経過時間|24:01:00|TIME|[h]: mm:ss|

その他のパターンの指定方法は
https://developers.google.com/sheets/api/guides/formats
を参照ください。

```
NumberFormat nf = new NumberFormat();
nf.setType("NUMBER");      //種類(タイプ)を指定
nf.setPattern("#,##0.00"); //パターンを指定

format.setNumberFormat(nf);
```
### 4. 表示形式  テキスト
セル内に表示する値のフォントを指定できます。

メニューバーの「表示形式 - テキスト」の項目　太字、斜体、下線、取り消し線　と、
メニューバーの「表示形式 - フォントサイズ」、
ツールーバーの「テキストの色」が指定できます。

```
TextFormat txFormat = new TextFormat();

txFormat.setBold(true);             //太字(true:有効,false:無効)
txFormat.setItalic(true);		    //斜体(true:有効,false:無効)
txFormat.setUnderline(true);	    //下線(true:有効,false:無効)
txFormat.setStrikethrough(false);   //取り消し線(true:有効,false:無効)
txFormat.setFontSize(15);	        //フォントサイズ

//テキストの色
Color color = new Color();
color.setRed(0f);
color.setGreen(0f);
color.setBlue(1f);
txFormat.setForegroundColor(color); //または、setForegroundColorStyle()

format.setTextFormat(txFormat);
```
### 5. 表示形式  水平方向配置
セル内の値を水平方向にどのように表示するかを指定できます。

指定可能な値は下記です。
・左(LEFT)
・中央(CENTER)
・右(RIGHT)
```
format.setHorizontalAlignment("LEFT");
```
### 6. 表示形式  垂直方向配置
セル内の値を垂直方向にどのように表示するかを指定できます。

指定可能な値は下記です。
・下(BOTTOM)
・中央(CENTER)
・上(TOP)
```
format.setVerticalAlignment("BOTTOM");
```
### 7. 表示形式  ラッピング
セル内の値を折り返すなど、どのように表示させるかを指定できます。

指定可能な値は下記です。
・折り返す(WRAP)
・はみ出す(OVERFLOW)
・切り詰める(CLIP)
説明は、スプレットシートのメニューの文言と同じにしています。
どのように表示されるかは、スプレットシートのマニュアルみたり、
実際に動作させて確認してみてください。
```
format.setWrapStrategy("WRAP");
```
### 8. 表示形式  回転
セル内のテキストの表示方向を指定できます。
「テキストの角度」か、「縦書き」のどちらか一方を指定できます。
両方を指定するとエラーになります。
```
TextRotation rotation = new TextRotation();

rotation.setAngle(45);	       //テキストの角度を指定する場合
//rotation.setVertical(true);  //縦書きの場合(setAngleのどちらか一方のみ)

format.setTextRotation(rotation);
```
### 9. 余白
セル内の上下左右の余白を指定できます。
```
Padding padding = new Padding();

padding.setTop(10);     //上の余白
padding.setBottom(10);  //下の余白
padding.setLeft(30);    //左の余白
padding.setRight(30);   //右の余白

format.setPadding(padding);
```
### 10. テキストの方向
セル内のテキストの方向を指定できます。

指定可能な値は下記です。
・左から右(LEFT_TO_RIGHT)
・右から左(RIGHT_TO_LEFT)
```
format.setTextDirection("LEFT_TO_RIGHT");
```
### 11. ハイパーリンク
セル内のテキストをハイパーリンクで表示するかを指定できます。

指定可能な値は下記です。
・ハイパーリンク表示(LINKED)
・ハイパーリンク非表示(PLAIN_TEXT)
セル内の値がURLではない場合、LINKEDを指定してもハイパーリンクにはなりません。
```
format.setHyperlinkDisplayType("LINKED");
```

おしまい。。