GASでスプレッドシートの指定セルからテキスト方向を取得する方法

Google Apps Script(GAS)を使ってスプレッドシートを操作しとると、セルのテキスト方向を制御したいことってあるばい?特に多言語対応やレイアウトの調整をするときには、getTextDirection()メソッドが役に立つけど、意外と知られとらん機能じゃ。

今回は、このgetTextDirection()メソッドの基本から応用までを、分かりやすく解説するばい!


スポンサーリンク

getTextDirection()って何するメソッド?

このメソッドは、スプレッドシートのセル内テキストの向きを取得するためのものじゃ。

GASではテキストの方向を以下の2種類で管理しとるとさ。

  • LEFT_TO_RIGHT(左から右)
  • RIGHT_TO_LEFT(右から左)

例えばアラビア語やヘブライ語のテキストを扱うときは、RIGHT_TO_LEFTに設定せんと見た目が崩れるばい。

const direction = SpreadsheetApp.TextDirection.RIGHT_TO_LEFT;

getTextDirection()を使うと、指定したセルのテキスト方向を取得できる。

function checkTextDirection() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getRange("A1");
  const direction = range.getTextDirection();
  console.log(direction ? direction.toString() : "自動判定");
}

getTextDirection()の使い方と挙動

メソッドの仕様

Range.getTextDirection() → TextDirection|null

getTextDirection()は、指定した範囲の左上のセルのテキスト方向を取得するばい。

ポイント

  • 明示的に方向が設定されていれば、LEFT_TO_RIGHT か RIGHT_TO_LEFT を返す
  • 方向が自動判定の場合は、null が返る
function logDirection() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getRange("B2");
  console.log(range.getTextDirection());
}

自動判定の仕組み

方向が手動設定されておらん場合、GASはテキスト内容から方向を判定するばい。

  • アラビア文字・ヘブライ文字が含まれる → RIGHT_TO_LEFT
  • それ以外 → LEFT_TO_RIGHT

ただし、混在しとる場合は判定がうまくいかんこともあるけん、明示的に設定するのがオススメばい。

range.setTextDirection(SpreadsheetApp.TextDirection.RIGHT_TO_LEFT);

getTextDirection() vs getTextDirections()の違い

メソッド戻り値範囲自動判定時
getTextDirection()TextDirection or null左上端のセルのみnull
getTextDirections()TextDirection[][]範囲内の全セルnull含む2D配列

一括取得したいなら、getTextDirections()を使うと効率が良いばい。

function logAllDirections() {
  const range = SpreadsheetApp.getActiveSheet().getRange("A1:B2");
  const directions = range.getTextDirections();
  console.log(directions);
}

テキスト方向を動的に制御する応用テクニック

言語判定を使って自動設定

GoogleのLanguageApp APIと組み合わせると、言語に応じてテキスト方向を自動でセットできるばい。

function autoSetDirection() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const range = sheet.getDataRange();
  const values = range.getValues();
  
  const directions = values.map(row => row.map(value => {
    const lang = LanguageApp.detect(value);
    return lang.includes('ar') ? SpreadsheetApp.TextDirection.RIGHT_TO_LEFT : SpreadsheetApp.TextDirection.LEFT_TO_RIGHT;
  }));
  
  range.setTextDirections(directions);
}

getTextDirection()のパフォーマンス最適化

テキスト方向を大量のセルに設定するときは、1セルずつ処理せんように注意せんといかん。

非推奨:ループで個別設定(遅い)

const range = sheet.getRange("A1:Z1000");
for (let i = 1; i <= 1000; i++) {
  range.getCell(i, 1).setTextDirection(SpreadsheetApp.TextDirection.RIGHT_TO_LEFT);
}

推奨:バッチ処理で一括設定(速い)

const directions = new Array(1000).fill([SpreadsheetApp.TextDirection.RIGHT_TO_LEFT]);
range.setTextDirections(directions);

よくあるトラブルと解決策

① 方向が設定されても反映されない?

👉 SpreadsheetApp.flush(); を呼び出して即時適用させるばい!

range.setTextDirection(SpreadsheetApp.TextDirection.LEFT_TO_RIGHT);
SpreadsheetApp.flush();

② 条件付き書式と競合する?

👉 条件付き書式ルールを確認し、setConditionalFormatRules() を調整するばい!

const rule = SpreadsheetApp.newConditionalFormatRule()
  .whenFormulaSatisfied('=ISTEXT(A1)')
  .setTextDirection(SpreadsheetApp.TextDirection.RIGHT_TO_LEFT)
  .build();
sheet.setConditionalFormatRules([rule]);

まとめ

  • getTextDirection() はスプレッドシートのセルのテキスト方向を取得するメソッド
  • 方向が自動判定の場合、null が返るので注意
  • 大量のセルを処理するときはバッチ処理を使うと高速化できる
  • 言語検出APIと組み合わせると、より柔軟な制御が可能

GASを使ってスプレッドシートの自動化を進めるなら、テキスト方向の制御もしっかり押さえとくと便利ばい!

コメント

タイトルとURLをコピーしました