ふいに「スプレッドシートで5千行ある英語を1行ずつ翻訳して隣の行に書いていた。」というポストを見た。
「プログラムでできるんじゃない?」そして簡単そうだな〜ということで、Google Apps Script (GAS) を触ってみることにしました。
GASを使って翻訳プログラムを作成
1. 拡張機能を追加
まず、スプレッドシートに「Apps Script」を使えるようにしました。
拡張機能をインストールし、ツールバーの「拡張機能」→「Apps Script」から開きます。
2. 翻訳対象の英語を準備
翻訳する英語をどこかのブログサイトから拝借。スプレッドシートのA列に入力しました。
3. Apps Scriptにコードを書く
スクリプトを書くために、「Apps Script」を開きます。こんな感じでコードを書くことができるウィンドウが開きました。
ツール横の拡張機能から「Apps Script」を選択。
新しいウィンドウが出てきた。
よくわからないけどここにコードを入れていくようだ。
書いていく。
function translateWords() {
関数名
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
////
spreadsheetApp
スプレッドシートのオブジェクト
getActiveSpreadsheet()
今開いているスプレッドシートの情報もらう
getActiveSheet()
現在選択中のシートタブを取得
これを行うと操作中のシートでコードが利用できるようになる。
A列のデータ取得
const range = sheet.getRange("A:A");
const values = range.getValues();
////
getRange = sheet.getRange("A:A")
シートのA列を全体を範囲として取得。
getValuer()
セルの値を配列形式で取得
A列の単語を1つずつ処理する
for (let i = 0; i < values.length; i++) {
const englishWord = values[i][0];
if (englishWord) {
const translatedWord = LanguageApp.translate(englishWord, "en", "ja");
sheet.getRange(i + 1, 2).setValue(translatedWord);
}
}
for文
なんか懐かしい書き方だ。
JavaScriptのテキストをやった時にこんな文法だった気がする。
let i = 0
処理の最初は配列0からです。
i<values.length
iに入っている値の長さ一個手前まで繰り返す。
iは基本0も含めるから長さでいうとi+1になるはず。
i++
処理が終わったら1足す。
const englishword = values[i][0];
valueは2次元配列らしい。
なのでiの位置を指定してあげる。
const translatedWord = LanguageApp.translate(englishWord, "en", "ja");
////
LanguageApp.translate
これはgoogleが持っている翻訳機能。
englishwordで文字列を取得している。
翻訳元を英語
翻訳先は日本語に設定。
sheet.getRange(i + 1, 2).setValue(translatedWord);
///
get Range(i + 1,2)
getRange(行,列)
行番号配列iは0からスタートしているため
ここで私はi+1ではなく1でやっていて1行目が凄いことになっていた。。。。
setValue(translatedWord)
これでB列に書き込み!
if (englishWord) {
}
これで囲むと空白はスキップしてくれる。
早く処理ができるらしい
出来たコードがこちら
function translateWords() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
const range = sheet.getRange("A:A");
const values = range.getValues();
for (let i = 0; i < values.length; i++) {
const englishWord = values[i][0];
if (englishWord) {
const translatedWord = LanguageApp.translate(englishWord, "en", "ja");
sheet.getRange(i + 1, 2).setValue(translatedWord);
}
}
}
そして実行を押すと
何に使えるかわからないけど。。。。
ちょっと楽しい遊びでした。
あれもできるんじゃないか?
と思いつくものは大体できそうだ。
簡単なものならね。
ちょっとした息抜きしてみました。