【问题标题】:Translate an entire Google Sheet using Google Translate使用谷歌翻译翻译整个谷歌表格
【发布时间】:2020-03-24 04:22:20
【问题描述】:

我有一个用日语编写的 Google 表格。我需要把它转换成英文。

我知道我们可以使用googletranslate(<sheet!:cell>, <input_language>, <output_language>) 进行翻译。

但是没有脚本,这迫使我翻译每一行。我需要一个可以将我的整个 Google 表格转换成英文的脚本。

我更喜欢将其转换为单独的工作表。请让我知道可能的解决方案。

TIA

【问题讨论】:

  • 我必须为我糟糕的英语水平道歉。我可以问你关于你的问题吗? 1.关于I have to do it for each and every row,在这种情况下,所有的单元格都要翻译吗? 2. 关于It would be better if its converted into a separate sheet,我看不懂。
  • @Tanaike 我将向您展示一个示例 Row 1 Col 1 Row 1 Col 1 Row 1 Col 1
  • @Tanaike 我倾向于保持原始“未翻译表”完整(作为历史记录),并为翻译创建一个新表。我认为这就是提问者的建议..
  • @Navaneetha Krishnan K 感谢您的回复。很遗憾,我无法理解您的回复。
  • @Tedinoz 感谢您的回复。从a separate sheet,我无法理解 OP 是想要将源电子表格复制到其他电子表格还是想要将其中一张表格复制到同一个电子表格。不幸的是,我仍然无法理解这一点。我必须为此道歉。

标签: google-apps-script google-sheets google-sheets-formula google-translate


【解决方案1】:
  • 您希望将电子表格中所有工作表的所有单元格的日文翻译成英文。
  • 您希望将包含已翻译值的工作表复制到同一个电子表格中。
  • 您希望使用 Google Apps 脚本实现此目的。

我可以像上面那样理解。如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。

在这个答案中,使用了 Class LanguageApp。

模式一:

在这种模式中,每个单元格都被翻译成LanguageApp.translate()

示例脚本:

请将以下脚本复制并粘贴到电子表格的容器绑定脚本中。并在脚本编辑器中运行myFunction。这样,电子表格中所有工作表的所有单元格都从日语翻译成英语。并且翻译后的值被放入同一个电子表格中的插入工作表中。

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。这样,电子表格中所有工作表的所有单元格都从日语翻译成英语。并且翻译后的值被放入同一个电子表格中的插入工作表中。

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 的情况下运行。

参考:

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但我需要多语言支持,我不希望有任何明显的延迟,也不想担心源单元格是否已经是我想要的目标语言,所以我想出了用这个解决方案。

    function onOpen() {
      var ui = SpreadsheetApp.getUi();
      ui.createMenu('Translations')
        .addItem('Japanese > English', 'jpToEn')
        .addToUi();
    }
    
    function jpToEn() {
      translate('jp','en')
    }
    
    function translate(inputLang, outputLang) {
      var ss = SpreadsheetApp.getActiveSpreadsheet();
      var sheet = ss.getActiveSheet();
      var dest = sheet.copyTo(ss);
      dest.setName(`${inputLang}_${outputLang}_${sheet.getName()}`)
      var range = dest.getDataRange();
      var formula = "=iferror(googletranslate('" + sheet.getName() + "'!" + "R[0]C[0],\"" + inputLang +"\",\"" + outputLang + "\"),\"\")";
      range.setFormulaR1C1(formula);
    }
    

    如您所见,这会为您的 Google 表格文档添加一个菜单。您可以根据需要随意翻译多种不同的语言。只需扩展菜单或替换已有的项目。

    【讨论】:

      【解决方案3】:

      我所做的非常简单,没有使用任何脚本或插件。

      我在 A1 单元格上创建了​​一个新工作表,我输入了一个公式:

      =GOOGLETRANSLATE(Sheet1!A1, "ru", "en")
      

      这给了我从Sheet1 翻译的A1 单元格。

      接下来,我将这个公式复制到我的新Sheet2 中的所有其他单元格中。瞧,你有翻译。

      但是,谷歌翻译在谷歌表格中将俄语翻译成英语时非常糟糕,所以我不得不通过剪切Sheet2 中的所有单元格并再次粘贴“仅值”来更改它。这为您提供了可以修改的已翻译单元格。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-26
        • 2015-05-19
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 2021-12-06
        相关资源
        最近更新 更多