GASでスプレッドシートのセルからリッチテキスト情報を取得する方法

みんな、スプレッドシートでリッチテキストを扱ったことあるかい?普通のgetValue()じゃ取得できない文字の装飾やリンク情報を、プログラムで操作したいってこと、あるよね?そんなときに活躍するのがgetRichTextValue()メソッドばい!

今回は、このメソッドの使い方や応用テクニックを、わかりやすくまとめてみたけん、一緒に学んでいこうじゃ!


スポンサーリンク

そもそもリッチテキストって?

Googleスプレッドシートのセルに入力するテキストは、単なる文字列じゃなくて、太字・斜体・色付き・リンク付き なんかの装飾をつけることができるっちゃね。こういう装飾付きの文字を「リッチテキスト」って呼ぶんじゃ。

でも、getValue()でセルの値を取得すると、装飾が消えてしまうっちゃ。ここで登場するのがgetRichTextValue()メソッドたい!


getRichTextValue()の基本

このメソッドを使えば、セル内のリッチテキスト情報をRichTextValueオブジェクトとして取得できるっちゃ。実際にコードを書いてみよう。

const range = SpreadsheetApp.getActiveSheet().getRange("A1");
const richText = range.getRichTextValue();
console.log(richText.getText()); // 純粋なテキスト
console.log(richText.getTextStyle().isBold()); // 太字かどうか

getText()を使えば普通の文字列を取得できるし、getTextStyle()を使えば装飾の詳細が取れるっちゃ。


部分的なスタイルを取得する方法

リッチテキストのすごいところは、セル内の一部だけに装飾を適用できることじゃね。例えば、「GAS」だけ太字 みたいなことができるばい。

const style = richText.getTextStyle(1, 4);
console.log(style.getFontSize()); // 2-4文字目のフォントサイズ

オフセット(開始位置)と長さを指定すると、その範囲だけのスタイルを取得できるっちゃ。これは細かいデザイン制御をしたいときに便利ばい!


ハイパーリンクの取得方法

スプレッドシートのセルにURLを貼り付けると、リンクになるばい。getRichTextValue()を使うと、そのリンク情報も取れるっちゃ。

const linkUrl = richText.getLinkUrl();
if (linkUrl) {
  console.log(`リンク先: ${linkUrl}`);
}

でもね、セル内に複数のリンクがあるとgetLinkUrl()nullを返すんじゃ。その場合は、getRuns()を使って個別に取得する方法もあるばい!

richText.getRuns().forEach((run, index) => {
  console.log(`ラン${index+1}: ${run.getText()}`);
  console.log(` URL: ${run.getLinkUrl()}`);
});

getRuns()を使うと、装飾ごとに分割された「ラン」を配列で取得できるっちゃ。これを活用すれば、細かくリッチテキストを解析できるばい!


ちょっとした落とし穴と対策

1. 日付や数値は取得できない

getRichTextValue()は、日付や数値が入ったセルではnullを返す ことがあるんじゃ。これを回避するには、一時的にセルのフォーマットを変更するといいばい。

function handleDateCell() {
  const range = SpreadsheetApp.getActive().getRange('A1');
  const originalFormat = range.getNumberFormat();
  
  range.setNumberFormat('@'); // 文字列フォーマットに変更
  const richText = range.getRichTextValue();
  console.log(richText.getText());
  
  range.setNumberFormat(originalFormat); // 元のフォーマットに戻す
}

2. 大量のデータを扱うと処理が遅くなる

大量のセルを1つずつ処理すると、スクリプトの実行時間が長くなってしまうっちゃ。こういうときは、バッチ処理 を活用するといいばい。

function batchProcessing() {
  const sheet = SpreadsheetApp.getActiveSheet();
  const dataRange = sheet.getRange('A1:C100');
  const richTextValues = dataRange.getRichTextValues();
  
  const processedData = richTextValues.map(row =>
    row.map(cell => ({
      text: cell.getText(),
      hasLink: !!cell.getLinkUrl()
    }))
  );
  
  console.log(processedData);
}

getRichTextValues()を使って、一気に取得すれば高速に処理できるっちゃ!


まとめ

getRichTextValue()を使えば、スプレッドシートの装飾付きテキストをプログラムで自由に扱えるばい。特に、

  • 文字の装飾を取得する
  • ハイパーリンクを抜き出す
  • ラン単位でテキストを解析する
  • バッチ処理で高速化する

こんなことができるのが強みじゃね!

これを活用すれば、デザイン校正ツールや自動レポート生成ツールなんかも作れるばい。ぜひ、色々試してみてちょうだい!

みんなもgetRichTextValue()を使いこなして、スプレッドシートのプロになろうばい!

コメント

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