Googleスプレッドシートで翻訳(GAS活用その後)
以前、Googleスプレッドシートで翻訳について記事を書きました。
汎用的なことを記事で書きましたが、普段の仕事が楽になるように、その後もコードは書き換えています。
■英文和訳以外に対応する
上述の記事では、和訳&置換表で訳語を調整するコードを紹介しました。
function translateIntoJa() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('シート1');
const values = sheet.getDataRange().getValues();
const lastRow = sheet.getLastRow();
const gResults = [];
const results = [];
const sheetTable = spreadsheet.getSheetByName("置換表");
// 見出しを除いて、A列のデータを取得
for(let i = 1; i < values.length; i++){
const sourceColumn = values[i][0];
// 英語から日本語に翻訳
const exportColumn = LanguageApp.translate(sourceColumn, "en", "ja");
gResults.push([exportColumn]);
}
// 置換表を全て取得
const tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues();
// 翻訳データを変換表の値に照らし合わせて置換(=分離&結合)
for(let i = 0; i < gResults.length; i++){
let fromStr = gResults[i][0];
for (const j in tableValues) {
fromStr = fromStr.split(tableValues[j][0]).join(tableValues[j][1]);
}
results.push([fromStr]);
}
sheet.getRange(2, 2, lastRow-1).setValues(results);
}
職場でも共有しましたら、和訳だけでなく、英訳をしたい。との声が早速貰いました。当然ですよね(笑)。技術的には、
const exportColumn = LanguageApp.translate(sourceColumn, "en", "ja");
を
const exportColumn = LanguageApp.translate(sourceColumn, "ja", "en");
と書き換えるだけですけど、使い勝手を考える必要があります。
和訳ファンクションと英訳ファンクションと2つ作り、それぞれを動作させるボタンを用意するのは簡単です。
でも、英語・日本語だけでなく、他の言語も対応させようとすると、途端に煩雑になります。対応させたい言語の数が3なら6パターン、4なら12パターン、nならn(n-1)/パターンと爆発的に増えるんで。
そこで言語コードリストをシートに埋め込み(設定は後述)、
1つのファンクションで処理できるように書き換えます。
function translateByGoogle() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('翻訳');
const langCode = sheet.getDataRange().getValues();
const sourceLang = langCode[0][2];
const targetLang = langCode[0][3];
const values = sheet.getDataRange().getValues();
const lastRow = sheet.getLastRow();
const gResults = [];
const results = [];
const sheetTable = spreadsheet.getSheetByName("置換表");
// 見出しを除いて、A列のデータを取得
for(let i = 1; i < values.length; i++){
const fromColumn = values[i][0];
// 言語コード(fromとto)を参照して翻訳
const toColumn = LanguageApp.translate(fromColumn, sourceLang, targetLang);
gResults.push([toColumn]);
}
// 置換表を全て取得
const tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues();
// 翻訳データを置換表の値に照らし合わせて置換(=分離&結合)
for(let i = 0; i < gResults.length; i++){
let fromStr = gResults[i][0];
for (const j in tableValues) {
fromStr = fromStr.split(tableValues[j][0]).join(tableValues[j][1]);
// Logger.log(fromStr);
}
results.push([fromStr]);
// Logger.log(results);
}
// B列に置換済み翻訳データを記入
sheet.getRange(2, 2, lastRow-1).setValues(results);
}
このコードを保存し、画像アイコンにスクリプトを割り当てれば完成です。
■コード解説
言語コードは、
C1セルは、langCode[0][2] をsourceLang に、
D1セルは、langCode[0][3] をtargetLangで取得し、
const toColumn = LanguageApp.translate(fromColumn, sourceLang, targetLang);
と書き換えてます。上記のコードで翻訳はできますが、置換表の処理は和訳のみ有効なので、それ以外は不要な処理です。そのため、 if (targetLang == 'ja')の時だけ置換処理し、他の言語コードは訳語データをすぐ貼り付けるようにして完成です。
function translateByGoogle() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('翻訳');
const langCode = sheet.getDataRange().getValues();
const sourceLang = langCode[0][2];
const targetLang = langCode[0][3];
const values = sheet.getDataRange().getValues();
const lastRow = sheet.getLastRow();
const gResults = [];
const results = [];
const sheetTable = spreadsheet.getSheetByName("置換表");
// 見出しを除いて、A列のデータを取得
for(let i = 1; i < values.length; i++){
const fromColumn = values[i][0];
// 言語コード(fromとto)を参照して翻訳
const toColumn = LanguageApp.translate(fromColumn, sourceLang, targetLang);
gResults.push([toColumn]);
}
if (targetLang == 'ja')
{
// 置換表を全て取得
const tableValues = sheetTable.getRange(2,1,sheetTable.getLastRow(),2).getValues();
// 翻訳データを置換表の値に照らし合わせて置換(=分離&結合)
for(let i = 0; i < gResults.length; i++){
let fromStr = gResults[i][0];
for (const j in tableValues) {
fromStr = fromStr.split(tableValues[j][0]).join(tableValues[j][1]);
// Logger.log(fromStr);
}
results.push([fromStr]);
// Logger.log(results);
}
// B列に置換済み翻訳データを記入
sheet.getRange(2, 2, lastRow-1).setValues(results);
}else
// B列に翻訳データを記入
sheet.getRange(2, 2, lastRow-1).setValues(gResults);
}
Google翻訳サービスでは3言語まで上部に並び、
レギュラー(?)入れ替えはリストから選択です。今回のGASコードで翻訳言語を増やす場合は、
で調べ、C1とD1セルを選択し、メニュー:データ→データの入力規則
,(カンマ)区切りで追加するだけです。
次回はシートを消去するスクリプトを紹介します。
この記事が気に入ったらサポートをしてみませんか?