Ankiにカードを追加するときに、ちょっとでも楽できないかを検討しています。
Google スプレッドシートとGoogle Apps Scriptを使うと単語の意味を調べる部分を楽できそうです。
日本語訳は1つしか出ないですが、単語がたくさんある時に細かいことを気にしないのであれば使えそうです。
※OS:Windows10、ブラウザ:Google Chrome
※Googleアカウント必須
ちなみに、以下のようなBasicカードを例にします。
大まかな流れ
Google スプレッドシートにスクリプトを書く
↓
Google スプレッドシートに英単語を書く
↓
Google Apps Scriptで日本語訳を自動取得する
↓
Google スプレッドシートをCSVファイルに変換し、ダウンロードする
↓
CSVデータをAnkiへ取り込む
ざっくり手順
Google スプレッドシートを準備し、スクリプトを書く
まずは、Google スプレッドシートの準備。
(Googleにログインしておく)アプリに入っていれば、アイコンをクリックすると無題のスプレッドシートが開けると思います。アプリに入っていなければ、Google検索で「スプレッドシート」と検索すればよいです。
Google スプレッドシートを開いたら、ツールバーの[ツール] > [スクリプト エディタ]をクリック。
2つのスクリプトファイルと1つのHTMLファイルを作ります。
■translate.gs
function translate(text, from_lang, to_lang) { if ( text.length > 0 ) { return LanguageApp.translate(text, from_lang, to_lang); } else { return ''; } }
■csv.gs
function downloadCsv() { var html = HtmlService.createTemplateFromFile("dialog").evaluate(); SpreadsheetApp.getUi().showModalDialog(html, "--Download--"); } function getData() { var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); var data = []; for (var i = 0; i < values.length; i++) { data.push(values[i].join("\t")); } return data.join("\r\n"); } function getFileName() { var sheetName = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getName() var datetime = Utilities.formatDate(new Date(),'Asia/Tokyo', 'yyyyMMddHHmm'); return sheetName + '_' + datetime + '.csv'; }
■dialog.html
<!DOCTYPE html> <html> <head> <base target="_top"> <script type='text/javascript'> window.onload = function(){ handleDownload(); } function handleDownload() { // 出力データを GAS から取得する var content = <?= getData(); ?>; var blob = new Blob([ content ], { "type" : "text/csv"}); var link = document.createElement('a'); // ファイル名を GAS から取得する link.download = <?= getFileName(); ?>; link.href = window.URL.createObjectURL(blob); link.click(); // ダイアログを閉じる google.script.host.close(); } </script> </head> </html>
こんなイメージです。
保存すると、プロジェクト名の入力を求められますが、適当でOKです。(後からでも変更できます。)
ちなみに保存先はGoogle Driveとなります。
A列に英単語を書き、B列で日本語訳取得スクリプトを呼び出す
シートに戻り、A列に英単語、B1セルに下記の関数式を書きます。
'translate(テキスト, [ソース言語, ターゲット言語]) =translate( A1, "en", "ja")
そして、B1セルを選択し、セルの右下に表示される”■”を英単語が入っている最下行までひっぱります。
すると、以下のようになります。
CSV出力ボタンを作る
シートの内容をCSVに出力するためのボタンを作成します。(なくてもいいけど、あった方が楽)
ツールバーの[挿入] < [図形描写]からボタンを作ります。
試しにこんなボタンを作りました。
ボタンを右クリックで選択し、3点の部分を左クリックします。
以下のようなメニューが出るので、「スクリプトを割り当て」を選択します。
以下のダイアログで「downloadCsv」と入力してOK。
CSVダウンロード
先ほど作成したボタンをクリックすると、シートの内容がCSVファイルとして出力できます。
初回はGoogleのセキュリティのダイアログが出るかもしれませんが、許可でOKです。
AnkiにCSVファイルを取り込む
Ankiで取り込みたいデッキを開き、ツールバーの[ファイル] > [読み込む]から先ほどダウンロードしたCSVファイルを選択します。
読み込みオプションとフィールドの割り当ては、以下の設定でOKです。
これで読み込めばOKです。あとはご自由にどうぞ。
補足
ちなみにGoogle スプレッドシートには、GOOGLETRANSLATE関数もあります。使い方はセルに以下のように書けばOKです。
'GOOGLETRANSLATE(テキスト, [ソース言語, ターゲット言語]) =GOOGLETRANSLATE( A1, "en", "ja")
こちらの方が簡単に使えますが、翻訳結果がなかなかイケてないので今回は採用しませんでした。
参考
今回、この記事を書くにあたり以下のサイトを参考にしました。コードとかほぼそのまま使ってしまったものもあるので問題があれば連絡ください。
・Google Apps Scriptを使って翻訳作業を自動化する手順
・Google Spreadsheet の googletranslate 関数の代わりに LanguageApp を使うワークシート関数を作ってイケてる翻訳ができるようにする
・Google Apps Script(gas)で翻訳する方法!多言語対応で英語も中国語も韓国語もスワヒリ語もいけるよ
・Google翻訳
・リファレンス Language Service
・【GAS】スプレッドシートからCSVをダウンロードする1クリックボタン/メニューを作成しよう
・スプレッドシートのデータをGASを使って1クリックでCSVに吐き出すものを作る。
・ローカルにファイルダウンロード