スプレッドシート内のテキストを簡単に日本語と英語に翻訳する方法をGoogle Apps Scriptを使ってご紹介します。
使用技術
- Google スプレッドシート: データの保存と管理に使用。
- Google Apps Script: 主にGoogle スプレッドシートを操作するためのプログラムを記述。
- このスクリプト言語は、JavaScriptに基づいています。
- Google Apps Script UI Service: スプレッドシートにカスタムメニューを追加するために使用。
- LanguageApp API: Google Apps Script内で翻訳を行うためのAPI。
- JSON: 配列やオブジェクトを簡単に扱うためにJSON形式を使用。
- Data Range: スプレッドシート内の特定の範囲を指定してデータを取得。
- Data Validations: セルに特定の入力規則が設定されているかどうかを判定。
- Formulas: スプレッドシート内のセルで使用されている数式を確認。
- UI Alerts: ユーザーにエラー情報や成功メッセージを表示。
機能
- カスタムメニューの追加: スプレッドシートに「翻訳」メニューを追加し、日本語と英語の翻訳オプションを提供。
- シートのコピー: アクティブなシートをコピーして新しいシートを作成。新しいシートの名前も翻訳される。
- セル内テキストの翻訳: 日本語または英語のテキストを含むセルを対象言語に翻訳。
- 数式のスキップ: セルに数式が含まれている場合、そのセルは翻訳から除外される。
- データ検証の考慮: 入力規則が設定されているセルは翻訳から除外される。
- エラーハンドリング: 翻訳中にエラーが発生した場合、そのセルの位置をユーザーに通知。
- 成功メッセージ: 翻訳が成功した場合、確認メッセージが表示される。
- バッチ翻訳のサポート: 複数のテキストを一度に翻訳する機能も含まれている(ただし、この機能は現在のところスクリプト内で直接使用されてはいない)。
ソースコード
JavaScript
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Translation')
.addItem('Japanese > English', 'jpToEn')
.addItem('English > Japanese', 'EnToJp')
.addToUi();
}
function jpToEn() {
translate('ja', 'en');
}
function EnToJp() {
translate('en', 'ja');
}
function batchTranslate(textArray, inputLang, outputLang) {
var concatenatedText = textArray.join('|');
var translatedText = LanguageApp.translate(concatenatedText, inputLang, outputLang);
return translatedText.split('|');
}
function translate(inputLang, outputLang) {
var errorCells = [];
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var translatedSheetName = LanguageApp.translate(sheet.getName(), inputLang, outputLang);
var dest = sheet.copyTo(ss);
dest.setName(translatedSheetName);
var originalRange = sheet.getDataRange();
var originalValues = originalRange.getValues();
var originalFormulas = originalRange.getFormulas();
var dataValidations = originalRange.getDataValidations();
var translatedValues = JSON.parse(JSON.stringify(originalValues));
for (var i = 0; i < originalValues.length; i++) {
for (var j = 0; j < originalValues[i].length; j++) {
if (dataValidations && dataValidations[i][j] !== null) {
continue; // Skip cells with data validation
}
if (originalFormulas[i][j] === "" && isNaN(originalValues[i][j]) && typeof originalValues[i][j] === "string") {
try {
var translatedText = LanguageApp.translate(originalValues[i][j], inputLang, outputLang);
dest.getRange(i + 1, j + 1).setValue(translatedText);
} catch (e) {
errorCells.push(`${String.fromCharCode(65 + j)}${i + 1}`);
}
}
}
}
if (errorCells.length > 0) {
SpreadsheetApp.getUi().alert(`Errors occurred in the following cells: ${errorCells.join(", ")}. Please check these cells manually.`);
} else {
SpreadsheetApp.getUi().alert('Translation completed. Please check the new sheet.');
}
}
// MIT License
// Copyright (c) 2023 [ANJI]
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
使い方
- Google スプレッドシートを開く: 新しいスプレッドシートを開くか、既存のスプレッドシートを選びます。
- スクリプトエディタを開く: 「拡張機能」メニューから「Apps Script」を選択してスクリプトエディタを開きます。
- コードを貼り付け: 与えられたJavaScriptコードをスクリプトエディタにコピー&ペーストします。
- 保存と閉じる: スクリプトを保存した後、エディタを閉じます。
- スプレッドシートに「翻訳」メニューが追加: スクリプトエディタを閉じた後、スプレッドシートに戻ると「翻訳」メニューが追加されています。
- 翻訳オプションを選択: 「翻訳」メニューから、翻訳したい言語のペア(「日本語 > 英語」または「英語 > 日本語」)を選びます。
- 翻訳の実行: オプションを選択した後、スクリプトが自動でアクティブなシートの内容を翻訳し、新しいシートを作成します。
- エラーチェック: エラーが発生した場合、アラートでその位置が通知されます。手動で修正が必要です。
- 確認メッセージ: 翻訳が成功すると、確認メッセージが表示されます。
コメント