スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい
シートのA列の英語をB列に日本語翻訳したい(トリガーでやってみる)
ではトリガーで実行する際にB列の開始行を取得しました
今回は
B列の開始行をスクリプトのプロパティを使って読み書きする方法を試しました
実行前
実行後
サンプルデータ
コード4.gsfunction myFunction() {
var numRow = 5;// 一度に取得する行数
var iterate = 2;// 繰り返す回数
var getStartCol = 1;// 値を取得する列番号 A列なら1
var setStartCol = 2;// 値を入力する列番号 B列なら2
var initialRow = 2;// 開始行の初期値 1行目が見出しなら2行目から
var ssUrl = 'https://docs.google.com/spreadsheets/d/SPREADSHEET_ID/edit#gid=0';
var sheet = getTargetSheet(ssUrl)
var lastRow = sheet.getLastRow();
var resultArray = [];
var startRow = getProp('startRow');
for(var i = 0; i < iterate; i++) {
var nextStartRow = getProp('startRow');
var range = sheet.getRange(nextStartRow, getStartCol, numRow, 1);
var values = range.getDisplayValues();
values = arrayPushApply(values);
values = values.filter(function(value) { return value !== ''; });
if(values.length > 0) {
resultArray.push(values);
setProp('startRow', parseInt(nextStartRow) + numRow);
} else {
setProp('startRow', initialRow);// 初期値に戻す
deleteTrigger('myFunction');
}
}
resultArray = arrayPushApply(resultArray);
setTranslated(sheet, startRow, setStartCol, resultArray);
}
function setTranslated(sheet, startRow, setStartCol, resultArray) {
var translateds = [];
for(var i = 0; i < resultArray.length; i++) {
var value = resultArray[i];
var translated = LanguageApp.translate(value, "", "ja");
translateds.push([translated])
}
var range = sheet.getRange(startRow, setStartCol, 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 deleteTrigger(functionName) {
var allTriggers = ScriptApp.getProjectTriggers();
for (var i = 0; i < allTriggers.length; i++) {
if (allTriggers[i].getHandlerFunction() == functionName) {
ScriptApp.deleteTrigger(allTriggers[i]);
break;
}
}
}
function getProp(key) {
return PropertiesService.getScriptProperties().getProperty(key);
}
function setProp(key, value) {
PropertiesService.getScriptProperties().setProperty(key, value);
}
|
関連記事
シートのA列の英語をB列に日本語翻訳したい(一気にやる)
シートのA列の英語をB列に日本語翻訳したい(B列最終行の次から)
シートのA列の英語をB列に日本語翻訳したい(トリガーでやってみる)

