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を使ってスプレッドシートの自動化を進めるなら、テキスト方向の制御もしっかり押さえとくと便利ばい!
コメント