📢 Googleスプレッドシートのセルを音声で読み上げる(日本語&英語対応)

Googleスプレッドシートに書かれた日本語や英語のテキストを、選択してメニューから読み上げる機能を作ってみました。
言語を自動で判別し、日本語は日本語で、英語は英語で発音されます。
また、ダイアログを閉じると音声も自動で停止するように工夫しています。

✅ 特徴

  • セルを選んでメニューから読み上げ
  • 日本語と英語を自動判別
  • ダイアログを閉じれば自動で音声も停止

🛠 導入方法(1分)

  1. スプレッドシートを開く
  2. 「拡張機能」→「Apps Script」を選択
  3. 以下のコードを貼り付けて保存
  4. スプレッドシートを再読み込みすると、上部に「音声」メニューが表示されます
function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('音声')
    .addItem('選択セルを読み上げる', 'speakSelectedCell')
    .addToUi();
}

function speakSelectedCell() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getActiveRange();
  const text = range.getDisplayValue();

  const isJapanese = /[\u3040-\u30FF\u4E00-\u9FFF]/.test(text);
  const lang = isJapanese ? 'ja-JP' : 'en-US';

  const html = `
    <html>
      <body>
        <p>読み上げ中:<b>${text}</b></p>
        <script>
          const utterance = new SpeechSynthesisUtterance(${JSON.stringify(text)});
          utterance.lang = '${lang}';
          speechSynthesis.speak(utterance);
          window.onunload = () => {
            speechSynthesis.cancel();
          };
        </script>
      </body>
    </html>
  `;

  const ui = HtmlService.createHtmlOutput(html).setWidth(300).setHeight(200);
  SpreadsheetApp.getUi().showModalDialog(ui, '音声読み上げ');
}

ゆっくりバージョン

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('音声')
    .addItem('選択セルを読み上げる', 'speakSelectedCell')
    .addToUi();
}

function speakSelectedCell() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const range = sheet.getActiveRange();
  const text = range.getDisplayValue();

  const isJapanese = /[\u3040-\u30FF\u4E00-\u9FFF]/.test(text);
  const lang = isJapanese ? 'ja-JP' : 'en-US';

  const html = `
    <html>
      <body>
        <p>読み上げ中:<b>${text}</b></p>
        <script>
          const utterance = new SpeechSynthesisUtterance(${JSON.stringify(text)});
          utterance.lang = '${lang}';
          utterance.rate = 0.7; // ★ 読み上げ速度をゆっくりに設定
          speechSynthesis.speak(utterance);

          window.onunload = () => {
            speechSynthesis.cancel();
          };
        </script>
      </body>
    </html>
  `;

  const ui = HtmlService.createHtmlOutput(html).setWidth(300).setHeight(200);
  SpreadsheetApp.getUi().showModalDialog(ui, '音声読み上げ');
}

▶ 使い方

  1. 読み上げたいセルを選択
  2. 上部メニューの「音声 → 選択セルを読み上げる」をクリック
  3. 自動で日本語または英語で読み上げが始まります
  4. ダイアログを閉じると読み上げも止まります
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

GoodMorning!

デジタルの海原を冒険しながら、美食の宝を探し求める探検家です。テクノロジーの世界を舞台に、新しい発見を求めて、キーボードの海を横断。そして、実世界では、隅々まで足を運んで、舌鼓を打つ価値のある美味しいお店を見つけ出します。

私の使命は、小さなITの豆知識から始まり、心を満たすグルメスポットの紹介まで、あなたの日常にちょっとしたスパイスを加えること。画面の向こう側から、気軽に楽しめる話題を届けたいのです。ここでは、私が「これは!」と思った技術的な小話や、舌の記憶に残るような食べ物屋さんを紹介していきます。

このWebサイトは、ITとグルメ、二つの世界を融合させた、まさにデジタルと現実の融合点。ふらっと立ち寄って、新たな発見や、ほっこりするような話題で一息ついていただけたら幸いです。知識の海を冒険し、味覚の旅を楽しみましょう。毎日を少しだけ特別なものに変える、そんな情報をお届けします。

GoodMorning!

I am an explorer who ventures across the digital sea in search of gastronomic treasures. In the world of technology, I traverse the sea of keyboards in search of new discoveries. And in the real world, I visit every nook and cranny to find a delicious restaurant worth tantalizing your taste buds.

My mission is to add a little spice to your everyday life, starting with little IT tidbits and ending with foodie spots that fill your heart. I want to bring you topics that you can easily enjoy from the other side of the screen. Here, I'm going to share with you some of the technical tidbits and I will introduce small technical stories and food shops that will leave a lasting impression on your taste buds.

This Web site is truly a fusion point of digital and reality, combining the two worlds of IT and gourmet. I hope you will stop by and take a breather with new discoveries and dusty topics. Come explore the sea of knowledge and enjoy a journey of taste. I will bring you the information that will change your everyday life into something a little more special.

目次