LANG SELRCT

Google Apps Scriptのコードを書く場所  (新規作成: スプレッドシート | スクリプトエディタ

2019年12月27日金曜日

シートのA列の英語をB列に日本語翻訳したい(スクリプトのプロパティを使ってみる)


スプレッドシートのA列に入力されている英語を日本語に翻訳してB列に入れたい

シートのA列の英語をB列に日本語翻訳したい(トリガーでやってみる)
ではトリガーで実行する際にB列の開始行を取得しました

今回は
B列の開始行をスクリプトのプロパティを使って読み書きする方法を試しました



実行前


実行後



サンプルデータ
englishjapanese
candy
chocolate
gum
caramel
cake
cream puff
chips
pancake
biscuit
pudding
cookie




コード4.gs
function 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列に日本語翻訳したい(トリガーでやってみる)

最新の投稿

Pixel 5でSuicaが使えないときはGoogle PayでSuicaを有効にしてみる

Pixel 5への機種変でSuicaが使えない人向けに書きました。 MISSION Pixel 5でSuicaを使えるようにする SOLUTION 旧端末で機種変更の設定を行う NFCをオンにする Google PayでSuicaを有効にする PROBLEMS 以前...