- Вы хотите перевести японский язык на английский язык sh для всех ячеек всех листов в электронной таблице.
- Вы хотите скопировать лист с переведенными значениями в одну электронную таблицу.
- Вы хотите добиться этого с помощью Google Apps Script.
Я мог бы понять, как выше. Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.
В этом ответе используется Class LanguageApp.
Шаблон 1:
В этом шаблоне каждая ячейка переводится с LanguageApp.translate()
.
Пример сценария:
Скопируйте и вставьте следующий сценарий в сценарий с привязкой к контейнеру электронной таблицы. И запустите myFunction
в редакторе сценариев. Таким образом, все ячейки всех листов электронной таблицы переводятся с японского на английский sh. И переведенные значения помещаются на вставленный лист в той же электронной таблице.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
sheets.forEach(sheet => {
const s = sheet.copyTo(ss).setName(`translated_${sheet.getSheetName()}`);
const range = s.getDataRange();
const translatedValues = range.getDisplayValues().map(r => r.map(c => {
Utilities.sleep(1000);
return LanguageApp.translate(c, "ja", "en");
}));
range.setValues(translatedValues);
});
}
- В этом случае каждая ячейка переводится. Таким образом, из спецификации необходимо использовать
Utilities.sleep(1000)
(ожидание 1 секунда). Таким образом, когда ячеек много, время обработки может быть большим.
Шаблон 2:
В этом шаблоне все ячейки листа извлекаются и преобразуются в строковое значение, затем строковое значение переводится. И переведенные значения помещаются на лист.
Пример сценария:
Пожалуйста, скопируйте и вставьте следующий сценарий в сценарий с привязкой к контейнеру электронной таблицы. И запустите myFunction
в редакторе сценариев. Таким образом, все ячейки всех листов в электронной таблице переводятся с японского на английский sh. И переведенные значения помещаются на вставленный лист в той же электронной таблице.
function myFunction() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
sheets.forEach(sheet => {
const s = sheet.copyTo(ss).setName(`translated_${sheet.getSheetName()}`);
const range = s.getDataRange();
const delimiter = "#";
const sourceValues = range.getDisplayValues().map(r => r.join(delimiter)).join("\n");
const translatedValues = Utilities.parseCsv(LanguageApp.translate(sourceValues, "ja", "en"), delimiter.charCodeAt(0));
range.setValues(translatedValues);
Utilities.sleep(1000);
});
}
- В этом случае значения всех ячеек переводятся одним запросом
LanguageApp.translate()
. Таким образом, время обработки будет меньше, чем в шаблоне 1. Но если значения большие, может произойти ошибка. В этом я не уверен. Я прошу прощения за это. - В приведенном выше сценарии
#
используется в качестве разделителя для преобразования в строковое значение. Если в ячейках используется #
, измените символ.
Примечание:
- Этот модифицированный скрипт запускается с включением V8.
Ссылка: