1. ホーム
  2. /
  3. [GAS]
  4. /
  5. 【GAS高速化】getFontStyles()でフォントスタイルを一括取得!API呼び出しを激減させる方法

【GAS高速化】getFontStyles()でフォントスタイルを一括取得!API呼び出しを激減させる方法

【GAS高速化】getFontStyles()でフォントスタイルを一括取得!API呼び出しを激減させる方法

Google Apps Script (GAS) で、スプレッドシート内の大量のセルのフォントスタイル(イタリック体など)をチェックする際に、スクリプトの実行が遅いと感じたことはありませんか?その原因は、ほぼ間違いなくAPIの呼び出し回数にあります。

getFontStyle()(単数形)をループ処理で使うのは、パフォーマンスを著しく低下させるアンチパターンです。

この記事では、スクリプトを劇的に高速化するための必須メソッド**getFontStyles()**に焦点を当て、その効果的な使い方と、取得した二次元配列を活用する実践的なテクニックを解説します。

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

なぜgetFontStyles()による一括取得が重要なのか?

getFontStyle()をループ内でセルごとに呼び出すと、セルの数だけネットワーク通信が発生し、実行時間が肥大化します。

getFontStyles()は、このAPI呼び出しをたった1回に集約します。指定範囲の全セルのフォントスタイル情報を一度に取得し、高速に処理できる二次元配列 (String[][]) として返すことで、パフォーマンスを劇的に改善するのです。

// 【非推奨】APIを何度も呼び出す遅いコード
function slowStyleCheck(range) {
  for (let i = 1; i <= range.getNumRows(); i++) {
    for (let j = 1; j <= range.getNumColumns(); j++) {
      const style = range.getCell(i, j).getFontStyle();
      // ...処理...
    }
  }
}

// 【推奨】API呼び出しは1回のみ!高速なコード
function fastStyleCheck(range) {
  const styles = range.getFontStyles(); // API呼び出しはここだけ
  styles.forEach(row => {
    row.forEach(style => {
      // ...取得した配列を処理...
    });
  });
}

getFontStyles()の使い方と戻り値

getFontStyles()は、指定した範囲のフォントスタイルを二次元配列で返します。

戻り値の各要素に含まれる文字列は以下の通りです。

  • 'italic': イタリック体
  • 'normal': 標準スタイル

二次元配列のループ処理

取得した二次元配列は、forEachを使って簡単に処理できます。

function logAllFontStyles() {
  const range = SpreadsheetApp.getActiveSheet().getRange("A1:B3");
  const styles = range.getFontStyles();
  
  styles.forEach((row, rowIndex) => {
    row.forEach((style, colIndex) => {
      const cellAddress = range.getCell(rowIndex + 1, colIndex + 1).getA1Notation();
      console.log(`セル ${cellAddress} のスタイル: ${style}`);
    });
  });
}

実践!getFontStyles()活用シナリオ

シナリオ1:フォントスタイルの統計レポートを作成する

シート内でitalicがどのくらいの割合で使われているかを集計し、レポートを出力します。

function generateStyleReport() {
  const range = SpreadsheetApp.getActiveSheet().getDataRange();
  const styles = range.getFontStyles();
  let italicCount = 0;
  const totalCells = range.getNumRows() * range.getNumColumns();

  // flat()で二次元配列を一次元化し、効率的に集計
  styles.flat().forEach(style => {
    if (style === 'italic') {
      italicCount++;
    }
  });

  const italicPercentage = (italicCount / totalCells * 100).toFixed(1);
  const message = `調査範囲: ${range.getA1Notation()}\n` +
                  `総セル数: ${totalCells}\n` +
                  `イタリックセルの数: ${italicCount}\n` +
                  `イタリックセルの割合: ${italicPercentage}%`;
  
  SpreadsheetApp.getUi().alert(message);
}

シナリオ2:不要なイタリック体を一括で標準スタイルに戻す

シート内のすべてのイタリック体をnormalスタイルに一括で修正します。読み込みと書き込みの両方を一括処理することが、最高のパフォーマンスを引き出す鍵です。

function normalizeAllItalicStyles() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  
  // 変更対象のスタイル情報を一括で読み込む
  const styles = range.getFontStyles();
  
  let isChanged = false;

  // メモリ上の配列データを書き換える(ここでの処理は高速)
  const newStyles = styles.map(row => {
    return row.map(style => {
      if (style === 'italic') {
        isChanged = true;
        return 'normal'; // イタリックをnormalに置換
      }
      return style;
    });
  });
  
  // 変更があった場合のみ、シートに一括で書き込む
  if (isChanged) {
    range.setFontStyles(newStyles);
    SpreadsheetApp.getUi().alert('イタリック体を標準スタイルに修正しました。');
  } else {
    SpreadsheetApp.getUi().alert('イタリック体のセルは見つかりませんでした。');
  }
}

このコードは、setFontStyles()を使うことで、変更後のスタイル情報を一度のAPI呼び出しでシートに適用しており、非常に効率的です。

まとめ

getFontStyles()は、複数セルのフォントスタイルを扱う上で欠かせない、パフォーマンス最適化の要です。

  • ループでgetFontStyle()を叩かない: 常にgetFontStyles()で一括取得する。
  • データは配列で操作: 取得した二次元配列をmapforEachで効率的に処理する。
  • 書き込みも一括で: setFontStyles()を使い、読み書き両方のパフォーマンスを最適化する。

この「一括処理」の原則は、GAS開発における最も重要なベストプラクティスの一つです。

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

関連記事

【GAS高速化】getFontWeights()で太字を一括取得!API呼び出しを激減させる方法

【GAS高速化】getFontWeights()で太字を一括取得!API呼び出しを激減させる方法

Google Apps Script (GAS)で、スプレッドシートの大量のセルの中から「太字(bold)のセル」を探す処理を書いたとき、実行に時間がかかりすぎて困った経験はありませんか?その原因は、十中八九、ループの中でgetFontWeight()(単数形)を呼び出していることにあります。

この記事では、パフォーマンスを劇的に改善するための必須メソッド**getFontWeights()**に焦点を当て、その効果的な使い方と、取得した書式情報を他のデータと組み合わせて活用する、より高度なテクニックを解説します。

【GAS】getFontStyleでイタリック体を判定!複数セルはgetFontStylesで高速化

【GAS】getFontStyleでイタリック体を判定!複数セルはgetFontStylesで高速化

Google Apps Script (GAS)で、「イタリック体(斜体)に設定されているセルを特定したい」といった、セルのフォントスタイルに基づいた自動化を行いたい場面があります。

その際に使用するのがgetFontStyle()メソッドですが、複数セルを扱う場合には大きな落とし穴があります。

この記事では、getFontStyle()getFontStyles()の正しい使い分け、リッチテキストを扱う際の注意点、そしてパフォーマンスを意識した実践的なコードを解説します。