1. ホーム
  2. /
  3. [GAS]
  4. /
  5. GAS getFontColors()解説 (旧メソッド) - なぜ新getFontColorObjects()へ移行すべきか

GAS getFontColors()解説 (旧メソッド) - なぜ新getFontColorObjects()へ移行すべきか

GAS getFontColors()解説 (旧メソッド) - なぜ新getFontColorObjects()へ移行すべきか

Google Apps Script (GAS) でスプレッドシートの文字色を一括取得する際、getFontColors() というメソッドが存在します。しかし、これは現在 旧式 (Legacy) となっており、より高機能な getFontColorObjects() の使用が強く推奨されています。

この記事では、getFontColors() の基本的な仕様を解説すると共に、なぜ新しいメソッドへ移行すべきなのか、その決定的な違いと具体的な移行方法を解説します。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索

getFontColors() の基本仕様

getFontColors() は、指定した範囲の各セルの文字色を、#ff0000 のような16進数カラーコードの文字列の二次元配列 (String[][]) として取得します。

function getFontColorsLegacy() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const targetRange = sheet.getRange('A1:B2');
  // 文字列の二次元配列が返ってくる
  const colorMatrix = targetRange.getFontColors();
  
  console.log(colorMatrix);
  // 実行結果の例:
  // [ ['#000000', '#ff0000'],
  //   ['#0000ff', '#008000'] ]
  
  // A2セルの色を取得
  console.log(colorMatrix[1][0]); // '#0000ff'
}

単純なカラーコードの比較だけであれば、このメソッドでも目的を達成することは可能です。

なぜ getFontColorObjects() への移行が推奨されるのか?

getFontColors() には、現代のスプレッドシート開発において無視できない大きな弱点があります。

比較項目getFontColors() (旧)getFontColorObjects() (新・推奨)
返り値の型文字列の二次元配列 String[][]Color オブジェクトの二次元配列 Color[][]
情報量16進数コードのみRGB値、テーマカラー情報など、詳細な情報を含む
テーマカラー対応不可 (実際のRGB値に変換されてしまう)完全対応 (getColorType()で判別可能)

最大の弱点は、テーマカラーを判別できないことです。getFontColors() は、セルにテーマカラーが設定されていても、その時点での具体的なRGBカラーコード (#4a86e8 など) を返してしまいます。これでは、「このセルがテーマの“アクセント1”の色である」という情報を知ることができません。

ドキュメント全体で統一感のあるデザインを保つ上で、テーマカラーを正しく扱える getFontColorObjects() の方が圧倒的に優れています。

既存コードからの移行(リファクタリング)ガイド

もし既存のスクリプトで getFontColors() が使われている場合、getFontColorObjects() に簡単に移行できます。

▼ 旧コード: 特定の色のセルをハイライトする

function highlightRedCells_Legacy() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const colors = range.getFontColors(); // 旧メソッド

  for (let i = 0; i < colors.length; i++) {
    for (let j = 0; j < colors[i].length; j++) {
      if (colors[i][j] === '#ff0000') {
        range.getCell(i + 1, j + 1).setBackground('#fce5cd');
      }
    }
  }
}

▼ 新コード: getFontColorObjects を使ったリファクタリング

function highlightRedCells_Modern() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const colorObjects = range.getFontColorObjects(); // 新メソッド

  colorObjects.forEach((row, i) => {
    row.forEach((color, j) => {
      // Colorオブジェクトを16進数に変換して比較
      if (color.asRgbColor().asHexString() === '#ff0000') {
        range.getCell(i + 1, j + 1).setBackground('#fce5cd');
      }
    });
  });
}

getFontColorObjects() で取得した Color オブジェクトに .asRgbColor().asHexString() を追加するだけで、旧コードとほぼ同じロジックで動作させつつ、将来的な拡張性(テーマカラー対応など)を持たせることができます。

まとめ

getFontColors() は、過去のスクリプトとの互換性のために残されていますが、その機能は限定的です。

  • getFontColors(): 単純な16進数カラーコードの配列を返す。テーマカラーを判別できない。
  • getFontColorObjects(): 詳細な情報を持つ Color オブジェクトの配列を返す。テーマカラーにも完全対応。

これから新しくスクリプトを作成する場合は、必ず getFontColorObjects() を使用してください。 既存のコードも、この記事を参考にぜひモダンな記述へとアップデートすることをお勧めします。

Google Apps Script 始め方 スプレッドシート 活用例
Google Apps Script 始め方 スプレッドシート 活用例 を各ショップで検索
Class Range | Apps Script | Google for Developers

Class Range | Apps Script | Google for Developers

関連記事

GASで文字色を高速一括取得!getFontColorObjects()でパフォーマンスを改善する方法

GASで文字色を高速一括取得!getFontColorObjects()でパフォーマンスを改善する方法

Google Apps Script (GAS) で、広範囲のセルの文字色を一つずつチェックするスクリプトを書いた結果、「処理が遅すぎてタイムアウトしてしまう…」という経験はありませんか? その原因は、セルの情報を何度も取得するためにAPIを繰り返し呼び出していることにあります。

このパフォーマンス問題を解決する鍵が、getFontColorObjects() メソッドです。

この記事では、getFontColorObjects() を使って複数セルの文字色情報を一括で高速に取得し、効率的に処理する方法を、具体的なコード例と共に徹底的に解説します。

GAS `getWraps()`でスプレッドシートのテキスト折り返しを一括制御!応用例と最適化

GAS `getWraps()`でスプレッドシートのテキスト折り返しを一括制御!応用例と最適化

Google Apps Script(GAS)でスプレッドシートを効率的に操作する際、セルのテキスト折り返し設定を一括で管理することは、大規模なデータセットの視認性を高め、プロフェッショナルなレポート作成において不可欠です。getWraps()メソッドは、このテキスト折り返し設定を複数のセルから一度に取得するための強力なツールです。

本記事では、GASのRange.getWraps()メソッドを徹底解説します。基本的な使い方から、データ量が多い場合のパフォーマンス最適化(キャッシュ活用)、さらには取得した情報を元にした列幅の自動調整、堅牢なスクリプト開発のためのエラー処理、そしてsetWraps()メソッドと連携した一括設定方法まで、具体的なコードを交えて分かりやすく紹介します。