今回やりたいこと
スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい
シートのA列の英語をB列に日本語翻訳したい(一気にやる)
シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)
では手動で実行するコードを書きました
件数が多い場合は実行時間制限(6分)にぶつかるので
今回はトリガーを使って試しました
- 1分ごとのトリガーにmyFunction()を設定すると
- 1分ごとに実行されて、最終行まで実行したらトリガーが自動で削除される
一日に翻訳できる量には制限があります
その上限を越えるとその日はそれ以上実行できなくなります
実行前
実行後
サンプルデータ
コード3.gsvar sourceLang = '';// 翻訳元の言語を空にしておくと自動判定してくれる
var targetLang = 'ja';// この言語に翻訳する 言語の種類は→https://cloud.google.com/translate/docs/languages
var sourceCol = 1;// 値を取得する列
var targetCol = 2;// 書き込む列
var numRow = 5;// 一度に取得する行数
var iterate = 2;// 繰り返す回数
function myFunction() {
var ssUrl = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0';
var sheet = getTargetSheet(ssUrl);
var lastRow = sheet.getLastRow();
for(var i = 0; i < iterate; i++) {
var resultArray = [];
var lastRowB = getLastRowAt(sheet, targetCol);
var startRow = lastRowB + 1;
var numRows = lastRow - lastRowB;
var range = sheet.getRange(startRow, sourceCol, numRow, 1);
var values = range.getDisplayValues();
values = arrayPushApply(values);
values = values.filter(function(value) { return value !== ''; });
if(values.length > 0) {
resultArray.push(values);
resultArray = arrayPushApply(resultArray);
setTranslated(sheet, startRow, resultArray);
} else {
deleteTrigger('myFunction');
}
}
}
function setTranslated(sheet, startRow, resultArray) {
var translateds = [];
for(var i = 0; i < resultArray.length; i++) {
var value = resultArray[i];
var translated = LanguageApp.translate(value, sourceLang, targetLang);
translateds.push([translated])
}
var range = sheet.getRange(startRow, targetCol, translateds.length, 1);
range.setValues(translateds);
}
//二次元配列を一次元配列にして返す
function arrayPushApply(array){
for(var i = 1; i < array.length; i++){
Array.prototype.push.apply(array[0], array[i]);
}
return array[0];
}
function getTargetSheet(ssUrl) {
var ss = SpreadsheetApp.openByUrl(ssUrl);
var sheetId = ssUrl.split("gid=")[1];
var sheets = ss.getSheets();
for (var i = 0; i < sheets.length; i++) {
if (sheets[i].getSheetId() == sheetId) {
break;
}
}
var sheet = ss.getSheets()[i];
return sheet;
}
function getLastRowAt(sheet, col) {
var startRow = 1;
var numCols = 1;
var lastRow = sheet.getLastRow();
var values = sheet.getRange(startRow, col, lastRow, numCols).getValues();
for (var i = values.length - 1; i >= 0; i--) {
if (values[i] != "") {
break;
}
}
var lastRowAt = i + 1;
return lastRowAt;
}
function deleteTrigger(functionName) {
var allTriggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < allTriggers.length; i++) {
if (allTriggers[i].getHandlerFunction() == functionName) {
ScriptApp.deleteTrigger(allTriggers[i]);
break;
}
}
}
|
関連記事
シートのA列の英語をB列に日本語翻訳したい(一気にやる)
シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)

