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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google Apps Script

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

マクロ

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

JavaScript

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

Q&A

解決済

1回答

6560閲覧

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

hogehoge_man

総合スコア11

Google Apps Script

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

マクロ

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

JavaScript

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

0グッド

0クリップ

投稿2017/10/01 06:52

###前提・実現したいこと
プログラミング超初心者です。
スプレッドシートで覚えたい英単語を一括で管理したいなと思って、そこに発音記号も取得できたら便利だと思い
「スプレッドシート 発音記号」でググって以下のサイトに辿り着きました。
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です。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

javascript

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

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

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

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

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

訂正

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

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

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

投稿2017/10/01 15:44

編集2017/10/02 10:32
namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hogehoge_man

2017/10/02 18:10

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問