前回とは逆に英語を入力して日本語に訳して
翻訳結果が不自然な時に手動で直せるようにしてみます

左下のテキストエリア「ta」に英文を切りの良い所で改行して入力すると
C列にそのテキストが入力され
以下自動入力される
右下のテキストエリア「ta_translate」に英→日でGoogle翻訳した結果が入り
D列にそのテキストが入力される
右上のテキストエリア「ta_sentence」には「ta」を一行にした文が入り
A列にそのテキストが入力される
左下のテキストエリア「ta_translate_sentence」には「ta_sentence」を英→日でGoogle翻訳した結果が入り
B列にそのテキストが入力される

翻訳結果を修正したいときは
左上のテキストエリア「ta_translate_sentence」で修正して
改行を入れるとシートにも入力される

テキストエリアで改行を2つ入れると
次の行へ移動する
Code.gs /************************************ メニューに追加する ************************************/ function onOpen() { SpreadsheetApp.getUi() .createMenu('SCRIPT') .addItem('GUI', 'openGUI') .addToUi(); } /************************************ UIを表示する ************************************/ function openGUI() { var html = HtmlService.createHtmlOutputFromFile('index') .setSandboxMode(HtmlService.SandboxMode.IFRAME); SpreadsheetApp.getUi() .showModalDialog(html, 'myGUI'); } /************************************ アクティブセルまでをグローバル化する ************************************/ var ss = SpreadsheetApp.getActive(); var sh = ss.getActiveSheet(); var range = sh.getActiveRange(); /************************************ 翻訳前と翻訳後の言語をグローバル化する ************************************/ var source_lang = "en"; var target_lang = "ja"; /************************************ アクティブ行の値を取得して返す ************************************/ function get_active_values(){ var row = range.getRow(); var value = sh.getRange(row+":"+row).getValues(); return value; } /************************************ 値をアクティブ行のC列に入れて source_lang→target_lang でGoogle翻訳した値をD列に入れて その値を返す ************************************/ function set_active_value(value){ var row = range.getRow(); sh.getRange('C'+row).setValue(value.trim()); var value = LanguageApp.translate(value, source_lang, target_lang); sh.getRange('D'+row).setValue(value.trim()); return value; } /************************************ 値をアクティブ行のB列に入れて source_lang→target_lang でGoogle翻訳した値をA列に入れて その値を返す ************************************/ function set_active_value_sentence(value){ var row = range.getRow(); sh.getRange('B'+row).setValue(value.trim()); var value_sentence_translate = LanguageApp.translate(value, source_lang, target_lang); sh.getRange('A'+row).setValue(value_sentence_translate.trim()); value = value_sentence_translate; return value; } /************************************ 値をアクティブ行のB列に入れる ************************************/ function set_active_value2(value){ var row = range.getRow(); sh.getRange('D'+row).setValue(value.trim()); } /************************************ 値をアクティブ行のA列に入れる ************************************/ function set_active_value3(value){ var row = range.getRow(); sh.getRange('A'+row).setValue(value.trim()); } /************************************ 上の行をアクティブにして値を取得して返す ************************************/ function get_prev_values(){ var col = range.getColumn(); var row = range.getRow()-1; sh.getRange(row , col).activate(); var value = sh.getRange(row+":"+row).getValues(); return value; } /************************************ 下の行をアクティブにして値を取得して返す ************************************/ function get_next_values(){ var col = range.getColumn(); var row = range.getRow()+1; sh.getRange(row , col).activate(); var value = sh.getRange(row+":"+row).getValues(); return value; }
index.html <!--/******************************** HTML ********************************/--> <textarea id="ta_translate_sentence" onkeyup="input_keyup3(event)" placeholder="ta_translate_sentence"></textarea> <textarea id="ta_sentence" placeholder="ta_sentence"></textarea> <br> <textarea id="ta" onkeyup="input_keyup(event)" placeholder="ta"></textarea> <textarea id="ta_translate" onkeyup="input_keyup2(event)" placeholder="ta_translate"></textarea> <br> <input type="button" id="prev" value="prev" onclick="prev_bt()"> <input type="button" id="next" value="next" onclick="next_bt()"> <input type="button" id="submit" value="submit" onclick="run_input()"> <!--/******************************** JavaScript ********************************/--> <script> //index.htmlを開いた時に実行する load_active_value(); /******************************** load_active_value テキストエリアにアクティブ行のテキストを読み込む処理: ********************************/ function load_active_value(){ google.script.run.withSuccessHandler(to_ta) .get_active_values(); } function to_ta(value){ set_ta_values(value); } /******************************** input_keyup id="ta"のテキストエリアで、キーを押した時の処理: 押されたキーコードが13(enter/return)で 改行が2つ連続で入ったら next_bt()を実行する 改行が1つだったら run_input()を実行する ********************************/ function input_keyup(event) { var kc = event.keyCode; var value = document.getElementById("ta").value; var value_split = value.split("\n"); if(kc==13){ if(value_split[value_split.length-2]==""){ next_bt(); }else if(value_split[value_split.length-1]==""){ run_input(); } } } /******************************** run_input id="ta"のテキストエリアで改行が1つ入った時の処理 Code.gsのset_ta_valuesにvalueを渡して C列にはそのまま入力し D列にはGoogle翻訳したものを入力する 成功したらtranslate_valueを実行する ********************************/ function run_input(value){ var value = document.getElementById("ta").value; google.script.run.withSuccessHandler(translate_value) .set_active_value(value); } /******************************** translate_value run_inputで.set_active_valueが成功した時の処理 Code.gsの.set_active_valueから返ってきた 翻訳結果をid="ta_translate"に表示して run_input_sentenceを実行する ********************************/ function translate_value(value){ document.getElementById("ta_translate").value = value; run_input_sentence(); } /******************************** run_input_sentence translate_valueで実行する処理 id="ta"で改行で分けられているテキストを 半角スペースでつないで一行にして id="ta_sentence"に表示する Code.gsの.set_active_value_sentenceに渡して B列にはそのまま入力して Google翻訳したものをアクティブ行のA列に入力する そしてその翻訳結果を受け取って id="ta_translate_sentence"に表示する ********************************/ function run_input_sentence(value){ var value = document.getElementById("ta").value; var value_split = value.split("\n"); var value_sentence = ""; for(i=0;i<value_split.length;i++){ value_sentence+=value_split[i].trim()+" "; } value = value_sentence; document.getElementById("ta_sentence").value = value; google.script.run.withSuccessHandler(translate_value_sentence) .set_active_value_sentence(value); } function translate_value_sentence(value){ document.getElementById("ta_translate_sentence").value = value; } /******************************** input_keyup2 id="ta_translate"のテキストエリアで、キーを押した時の処理: 押されたキーコードが13(enter/return)で 改行が2つ連続で入ったら next_bt()を実行する 改行が1つだったら run_input2()を実行する ********************************/ function input_keyup2(event) { var kc = event.keyCode; var value = document.getElementById("ta_translate").value; var value_split = value.split("\n"); if(kc==13){ if(value_split[value_split.length-2]==""){ next_bt(); }else if(value_split[value_split.length-1]==""){ run_input2(); } } } /******************************** run_input2 id="ta_translate"のテキストエリアで改行が1つ入った時の処理 Code.gsのset_ta_value2にvalueを渡して D列に入力する ********************************/ function run_input2(){ var value = document.getElementById("ta_translate").value; google.script.run.set_active_value2(value); } /******************************** input_keyup3 id="ta_translate_sentence"のテキストエリアで、キーを押した時の処理: 押されたキーコードが13(enter/return)で 改行が2つ連続で入ったら next_bt()を実行する 改行が1つだったら run_input2()を実行する ********************************/ function input_keyup3(event) { var kc = event.keyCode; var value = document.getElementById("ta_translate_sentence").value; var value_split = value.split("\n"); if(kc==13){ if(value_split[value_split.length-2]==""){ next_bt(); }else if(value_split[value_split.length-1]==""){ run_input3(); } } } /******************************** run_input3 id="ta_translate_sentence"のテキストエリアで改行が1つ入った時の処理 Code.gsのset_ta_value3にvalueを渡して A列に入力する ********************************/ function run_input3(){ var value = document.getElementById("ta_translate_sentence").value; google.script.run.set_active_value3(value); } /******************************** prev_bt 上の行のテキストをテキストエリアに表示する処理 Code.gsの.get_prev_values()で 上の行のテキストを取得して set_ta_valuesで UIのテキストエリアに表示する ********************************/ function prev_bt(){ google.script.run.withSuccessHandler(prev_fnc) .get_prev_values(); } function prev_fnc(value){ set_ta_values(value); } /******************************** next_bt 下の行のテキストをテキストエリアに表示する処理 Code.gsの.get_next_values()で 下の行のテキストを取得して set_ta_valuesで UIのテキストエリアに表示する ********************************/ function next_bt(){ google.script.run.withSuccessHandler(next_fnc) .get_next_values(); } function next_fnc(value){ set_ta_values(value); } /******************************** set_ta_values UIのテキストエリアにテキストを表示する処理 最後にid="ta"にフォーカスを移動する ********************************/ function set_ta_values(value){ var value_split = value.toString().split(","); document.getElementById("ta_sentence").value=value_split[0]; document.getElementById("ta_translate_sentence").value=value_split[1]; document.getElementById("ta").value=value_split[2]; document.getElementById("ta_translate").value=value_split[3]; document.getElementById("ta").focus(); } </script>