Перевести всю таблицу Google с помощью Google Translate - PullRequest
1 голос
/ 24 марта 2020

У меня есть Google Sheet на японском языке, но мне нужно конвертировать его в английский sh.

Я знаю, что мы можем использовать формулу для перевода: GOOGLETRANSLATE ("Значение ячейки", "ja", "en").

Но я должен сделать это для каждого и в каждой строке мне нужен скрипт или код, который может конвертировать всю мою страницу Google в Engli sh.

Было бы лучше, если бы его конвертировали в отдельный лист. Пожалуйста, дайте мне знать возможные решения

TIA.

1 Ответ

2 голосов
/ 24 марта 2020
  • Вы хотите перевести японский язык на английский язык 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.

Ссылка:

...