GAS(Google Apps Script)を用いて、スプレッドシートのセルに入力された値・文字列の文字色(カラーコード)を取得するメソッドは単一セルの場合は『getFontColorObjectメソッド』、範囲の場合は『getFontColorObjectsメソッド』です。
以前は、『getFontColorメソッド』があったのですが、サポート終了してしまっているので、『getFontColorObjectメソッド』もしくは、『getFontColorObjectsメソッド』を使ってください。
それでは、紹介をしていきたいと思います。興味ある方は最後まで御覧ください!
こんにちは。当ブログの管理人の『くろん』です。
30代サラリーマン、新規事業推進室に所属。ブラック企業努め時代に身に着けた業務効率化ノウハウをアウトプットしていきます。
読んでくれた方の業務が一秒でも早く終わりますようにの精神で記事書いてます!!
getFontColorObjectメソッドの使い方
『getFontColorObjectメソッド』は、『Colorオブジェクト』で単一のセルの文字色を返します。
『Colorオブジェクト』は、色に関する値をまとめている箱と考えてください。
この箱から、RGB値や16進法カラーコードとして情報を取り出すようなイメージです。
RGB形式で色を取得する(単一セル)
function getFontColorObject_fontcolorRGB() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('文字色取得');
// getFontColorObjectメソッドで文字色を『colorObj』変数に取得
let colorObj = sheet1.getRange("A2").getFontColorObject();
// 『colorObj』に保管されたColorオブジェクトから、R値G値B値をそれぞれ取得した後に繋げてC1セルに
let red = colorObj.asRgbColor().getRed(); //赤
let green = colorObj.asRgbColor().getGreen(); //緑
let blue = colorObj.asRgbColor().getBlue(); //青
sheet1.getRange("B2").setValue('rgb(' + red + ',' + green + ',' + blue + ')');
}
A2セルの値の文字色を、B2セルにRGBカラーチャンネルで出力するGASです。
赤、緑、青の値を個別に取得する必要があり、それを『,』(カンマ)でつなぎ合わせるとともに、『rgb()』を付け加えて出力しています。
『rgb(r,g,b)』の形式としておくと、文字列に対してカラーコードで文字色を変更するメソッドである『setFontColorメソッド』において、この形式でRGB値を指定することで、文字色を変えることができます。
16進数カラーコードで色を取得する(単一セル)
function getFontColorObject_fontcolor_asHex() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('文字色取得');
// getFontColorObjectメソッドで文字色を『colorObj』変数に取得
let colorObj = sheet1.getRange("A2").getFontColorObject();
// 『colorObj』に保管されたColorオブジェクトから、CSSスタイル(16進法カラーコード)でB2セルに出力
sheet1.getRange("B2").setValue(colorObj.asRgbColor().asHexString());
}
A2セルの値の文字色を、B2セルに16進法カラーコードで出力するGASです。
getFontColorObjectsメソッドの使い方
『getFontColorObjectsメソッド』は、指定した範囲のセルにある値の文字色を返すメソッドです。
スプレッドシートのカラーパレットにある色のカラーコードを取得してみます。
RGB形式で色を取得する(範囲のセル)
function getFontColorObjects_fontcolor_asrgb() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('文字色取得');
// getFontColorObjectsメソッドで文字色を『colorObjs』変数に取得
let colorObjs = sheet1.getRange("A2:J9").getFontColorObjects();
// 『colorObjs』に保管されたColorオブジェクトから、RGB値をそれぞれ出力し、『rgb()』の形式でL2:U9セルに出力
for (let i = 0; i < colorObjs.length; i++) {
for (let j = 0; j < colorObjs[i].length; j++) {
let red = colorObjs[i][j].asRgbColor().getRed(); //赤
let green = colorObjs[i][j].asRgbColor().getGreen(); //緑
let blue = colorObjs[i][j].asRgbColor().getBlue(); //青
sheet1.getRange(i+2,j+12).setValue('rgb(' + red + ',' + green + ',' + blue + ')');
}
}
}
0,0,0 | 67,67,67 | 102,102,102 | 153,153,153 | 183,183,183 | 204,204,204 | 217,217,217 | 239,239,239 | 243,243,243 | 255,255,255 |
152,0,0 | 255,0,0 | 255,153,0 | 255,255,0 | 0,255,0 | 255,255 | 74,134,232 | 0,0,255 | 153,0,255 | 255,0,255 |
230,184,175 | 244,204,204 | 252,229,205 | 255,242,204 | 217,234,211 | 208,224,227 | 201,218,248 | 207,226,243 | 217,210,233 | 234,209,220 |
221,126,107 | 234,153,153 | 249,203,156 | 255,229,153 | 182,215,168 | 162,196,201 | 164,194,244 | 159,197,232 | 180,167,214 | 213,166,189 |
204,65,37 | 224,102,102 | 246,178,107 | 255,217,102 | 147,196,125 | 118,165,175 | 109,158,235 | 111,168,220 | 142,124,195 | 194,123,160 |
166,28,0 | 204,0,0 | 230,145,56 | 241,194,50 | 106,168,79 | 69,129,142 | 60,120,216 | 61,133,198 | 103,78,167 | 166,77,121 |
133,32,12 | 153,0,0 | 180,95,6 | 191,144,0 | 56,118,29 | 19,79,92 | 17,85,204 | 11,83,148 | 53,28,117 | 116,27,71 |
91,15,0 | 102,0,0 | 120,63,4 | 127,96,0 | 39,78,19 | 12,52,61 | 28,69,135 | 7,55,99 | 32,18,77 | 76,17,48 |
A2からJ9にある値の文字色を、L2からU9にRGBカラーコードで出力しました。
16進数カラーコードで色を取得する(範囲のセル)
function getFontColorObjects_fontcolor_asHex() {
// コンテナバインドされてるスプレッドシートを取得
let spreadsheet1 = SpreadsheetApp.getActiveSpreadsheet();
// シート名指定でシートを取得
let sheet1 = spreadsheet1.getSheetByName('文字色取得');
// getFontColorObjectsメソッドで文字色を『colorObjs』変数に取得
let colorObjs = sheet1.getRange("A2:J9").getFontColorObjects();
// 『colorObjs』に保管されたColorオブジェクトから、CSSスタイル(16進数カラーコード)でL2:U9セルに出力
for (let i = 0; i < colorObjs.length; i++) {
for (let j = 0; j < colorObjs[i].length; j++) {
sheet1.getRange(i+2,j+12).setValue(colorObjs[i][j].asRgbColor().asHexString());
}
}
}
#000000 | #434343 | #666666 | #999999 | #b7b7b7 | #cccccc | #d9d9d9 | #efefef | #f3f3f3 | #ffffff |
#980000 | #ff0000 | #ff9900 | #ffff00 | #00ff00 | #00ffff | #4a86e8 | #0000ff | #9900ff | #ff00ff |
#e6b8af | #f4cccc | #fce5cd | #fff2cc | #d9ead3 | #d0e0e3 | #c9daf8 | #cfe2f3 | #d9d2e9 | #ead1dc |
#dd7e6b | #ea9999 | #f9cb9c | #ffe599 | #b6d7a8 | #a2c4c9 | #a4c2f4 | #9fc5e8 | #b4a7d6 | #d5a6bd |
#cc4125 | #e06666 | #f6b26b | #ffd966 | #93c47d | #76a5af | #6d9eeb | #6fa8dc | #8e7cc3 | #c27ba0 |
#a61c00 | #cc0000 | #e69138 | #f1c232 | #6aa84f | #45818e | #3c78d8 | #3d85c6 | #674ea7 | #a64d79 |
#85200c | #990000 | #b45f06 | #bf9000 | #38761d | #134f5c | #1155cc | #0b5394 | #351c75 | #741b47 |
#5b0f00 | #660000 | #783f04 | #7f6000 | #274e13 | #0c343d | #1c4587 | #073763 | #20124d | #4c1130 |
A2からJ9にある値の文字色を、L2からU9に16進法カラーコードで出力しました。
まとめ
単一のセルの値・文字列の文字色を取得するには、『getFontColorObjectメソッド』を、範囲の場合には『getFontColorObjectsメソッド』を使います。
『getFontColorObjectsメソッド』は配列で情報が取得されるので、取り出すときにfor文などでループ処理をする必要があるので、注意が必要になります。