LANG SELRCT

Apps Script Reference  (Create: Create new Spreadsheet | Create new Apps Script

Friday, December 27, 2019

シートの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列に日本語翻訳したい(トリガーでやってみる)

Latest post

スプレッドシートA列にある複数のテキストをスライドに追加したい(Google Apps Script)

今回Google Apps Scriptでやりたいこと GoogleスプレッドシートA列にある複数の値を取得して Googleスライドに渡して 図形オブジェクトのテキストとして追加したい ① スプレッドシートのA列に値を入れておく ② Code.gsのinsertNewShape...