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

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

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

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

Q&A

解決済

2回答

1383閲覧

翻訳APIを使用した一括変換関数を作成しましたが、一括出力がうまくいかないです

TopingMado

総合スコア25

Google Apps Script

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

0グッド

0クリップ

投稿2020/11/04 07:40

編集2020/11/05 09:47

前提・実現したいこと

指定したスプレッドシートの全シートを対象に、
全てのデータを翻訳APIを使用して別の言語に変換し上書きしたいです。
しかし、出力を行う際にエラーが出まして、ご教授頂ければ幸いでございます。
###追記
LanguageApp.translate は 1 セルずつしか変換不可とご教授頂き、
コードを更新してみましたが、相変わらずうまくいかないようです。

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

Logger.logで翻訳は成功だと確認済みですが、エラーが出て、一括出力ができません

コード改善後のエラーゴード Exception: パラメータ(String)が SpreadsheetApp.Range.setValues のメソッドのシグネチャと一致しません。(行 26、ファイル「コード」)

改善後ソースコード

GAS

1const UwagakiCNtoTW=()=> { 2 var Spreadsheet = SpreadsheetApp.openById("シートID"); 3 var sheets = Spreadsheet.getSheets(); 4 for(var i = 0; i <sheets.length; i++){ 5 replaceProcess(sheets[i]); //シートごとに同じ処理 6 } 7} 8 9const replaceProcess =(RunSheet)=> { 10var LastRow=RunSheet.getLastRow(); 11var LastCol=RunSheet.getLastColumn(); 12//var DataList=[]; 13 14for(var c = 0;c<LastCol;c++){ //列ごとに処理 15 16 var OriData = RunSheet.getRange(1,c+1,LastRow,1).getValues(); //列ごとに最終行までのデータを獲得 17var OriData = [].concat.apply([],OriData); 18 19 var TranslatedList=[]; 20for(var t=0;t<OriData.length;t++) { 21 22TranslatedList.push(LanguageApp.translate(OriData[t],"zh-TW","zh-CN")); //データごと変換して配列に格納 23 24} 25for(var v=0;v<TranslatedList.length;v++){ 26RunSheet.getRange(v+1,c+1).setValues(TranslatedList[v]); 27 28} 29 } 30}

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

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

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

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

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

guest

回答2

0

ベストアンサー

自己満足回答

javascript

1const q302306 = () => { 2 SpreadsheetApp.getActive().getSheets().forEach(e=>handleSheet(e)); 3} 4const handleSheet = (sheet) => { 5 const dat = sheet.getDataRange().getValues().map(r=>r.map(c=>LanguageApp.translate(c,"zh-TW","zh-CN"))); 6 sheet.getRange(1,1,dat.length,dat[0].length).setValues(dat); 7}

投稿2020/11/21 15:26

papinianus

総合スコア12705

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

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

TopingMado

2020/11/30 00:46

いつもご回答いただき、誠にありがとうございます。 ご作成のコードで実行する際に下記のエラーメッセージが発生しておりましたので、一応伝えさせていただきます。 「Exception: 短時間にサービス translate を実行した回数が多すぎます。呼び出しの間に Utilities.sleep(1000) を試してください。(行 5、ファイル「コード」)」 また、ご教授の通り、「setValues」を「setValue」に変更することで翻訳は無事に行えました。 自分である程度デバッグはしているつもりですが、大変失礼致しました。
guest

0

LanguageApp.translate は 1 セルずつ変換してくれる便利機能はないので、全部のセルをループして変換していくしかないです。

ただセルの数によっては実行時間がかかりすぎる危険がありそう

-- 追記

  • デバッグしてもらうサイトではないのですが。

多分

RunSheet.getRange(v+1,c+1).setValues(TranslatedList[v]);

RunSheet.getRange(v+1,c+1).setValue(TranslatedList[v]);

にするといいような気がします。

投稿2020/11/04 08:20

編集2020/11/21 15:27
papinianus

総合スコア12705

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

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

TopingMado

2020/11/05 09:44

お忙しい中、お返事くださり誠にありがとうございます。 セール1つずつ変換してから、配列に格納して出力するよう、 書き直してみましたが相変わらずエラーが出て使用できません。 ご教授頂ければ幸いでございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問