質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • JavaScript

    15249questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Google Apps Script

    712questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • マクロ

    206questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

【スプレッドシート】英単語の発音記号取得のための関数

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 447

banr1jnts

score 3

前提・実現したいこと

プログラミング超初心者です。
スプレッドシートで覚えたい英単語を一括で管理したいなと思って、そこに発音記号も取得できたら便利だと思い
「スプレッドシート 発音記号」でググって以下のサイトに辿り着きました。
https://ameblo.jp/it-books/entry-12120134002.html
ここにはそのためのソースが載っていて、それをそのまま自分のスプレッドシートのスクリプトにコピペしたところ
エラーが出たので質問させていただこうと思いました。
そのエラーが出てしまう原因と、どうすれば改善できるかを教えていただけると大変ありがたいです。
どうかよろしくお願いいたします。

発生している問題・エラーメッセージ

A1セルに apple
B1セルに =pronounciation_list(A1)
と打ち込んだところ
B1セルに #ERROR!
と表示され、マウスをあてるとコメントで
エラー
setValue を呼び出す権限がありません(行 8)が発生しました。
と出てきました。
少し考えましたが、全く分かりませんので原因を教えて下さい。

該当のソースコード

function pronunciation_list() {
var sheet, i, word, pron;
sheet = SpreadsheetApp.getActiveSheet();
for(i = get_lastrow(); i <= sheet.getLastRow(); i++) {//
if(sheet.getRange(i, 2).getValue() == "") {
word = sheet.getRange(i, 1).getValue();
pron = fetch_pronunciation(word);
sheet.getRange(i, 2).setValue(pron);
}
}
}

function fetch_pronunciation(word) {
var url, response, list, ms, prons, i, parts, pron;
url = "http://ejje.weblio.jp/content/";
try {
response = UrlFetchApp.fetch(url + word);
list = response.getContentText();
list = list.replace(/(.*?)<\/span>/g, "$1");
ms = list.match(/(.*?)<\/span>/g);
} catch(e) {
var error = e;
Logger.log("message:" + error.message + "\nfilename:" + error.filename
+ "\nlineNumber:" + error.linenumber);
ms = null;
}
if(ms !== null) {
prons = [];
for(i = 0; i < ms.length; i++) {
parts = ms[i].match(/(.*?)<\/span>/);
prons.push(parts[1]);
}
pron = prons.join(" / ");
} else {
pron = "";
}
return pron;
}

function get_lastrow() {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange("B:B").getValues();

for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
Logger.log(lastRow);
return lastRow;
}

試したこと

初心者過ぎて何も試してません。

補足情報(言語/FW/ツール等のバージョンなど)

言語はおそらくJavascriptです。
パソコンはMacBookAir、ネットはGoogleChromeです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

その方法(セルに関数=pronounciation_list(A1)を入れる方法)で実行する場合は挙げていただいたコードでは不可能です。

またこちらの実行環境で挙げていただいたサイト通りに試してみましたけど、反応ないんですが。。って感じだったので作り直してみました。

言語は厳密にはjavascriptではないそうですが、同じと考えて差し支え無いです。

function fetch_pronunciation(word){
  var url, response, list, m, pron;
  url = "http://ejje.weblio.jp/content/";
  try {
    response = UrlFetchApp.fetch(url + word);
    list = response.getContentText();
    m = list.match(/phoneticEjjeDesc.*?>\//g);
    if(m==null) return "見つかりませんでした";
    pron = m[0];
    pron = pron.replace("phoneticEjjeDesc>","").replace(/<.*?>/g,"").replace(/\(..英語\)/g,"").replace("/","");
    return pron;
  }catch(e){
    Logger.log("message:" + e.message + "\nfilename:" + e.filename + "\nlineNumber:" + e.linenumber);
    return "error";
  }
}

サイトのを改変して作ったので変数とかごちゃごちゃしちゃいましたが。。(^ ^;

当方の実行環境ではこれで定義した関数を質問者様同様B1セルに=fetch_pronunciation(A1)※と打ち込んで、その後オートフィルする方が圧倒的に速かったです。

ただ私も初めてgoogleスプレッドシートのスクリプトエディタを使ったので少し自信が無いかも。。(^ ^;

うまく行かない部分があれば返信ください。m(_ _)m

 訂正

最初に回答した時、※の部分について=pronounciation_list(A1)としてしまっていましたが、=fetch_pronunciation(A1)の誤りでした。ごめんなさい。m(_ _)m

=fetch_pronunciation(A1)が正しいです。関数名に気をつけて実行してみてください。よろしくお願いします。

できれば結果をコメントしていただけるとありがたいです。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/10/03 03:10

    ご丁寧な回答ありがとうございます。
    仰っていただいたとおりにしてみたところ、うまくいきました!
    とても助かりました。
    この投稿をした後に少し自分でも勉強したのですが、最初にした質問が的はずれすぎてとても恥ずかしくなりました、、笑
    これから自分なりにもっと勉強していこうと思います。
    もしよかったら、また是非質問させてください。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • JavaScript

    15249questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • Google Apps Script

    712questions

    Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

  • マクロ

    206questions

    定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。