google-apps-script - 使用谷歌翻译翻译整个谷歌表格

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

我有一个用日语写的谷歌表格。我需要把它转换成英文。
我知道我们可以使用 googletranslate(<sheet!:cell>, <input_language>, <output_language>)翻译。
但是没有脚本,这迫使我翻译每一行。我需要一个可以将我的整个 Google 表格转换成英文的脚本。
我更喜欢将其转换为单独的工作表。请让我知道可能的解决方案。
TIA

最佳答案

  • 您想将电子表格中所有工作表的所有单元格的日文翻译成英文。
  • 您希望将具有翻译值的工作表复制到同一个电子表格。
  • 您想使用 Google Apps 脚本实现此目的。

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

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

    模式一:

    在此模式中,每个单元格都使用 LanguageApp.translate() 进行翻译。 .

    示例脚本:

    请将以下脚本复制并粘贴到电子表格的容器绑定(bind)脚本中。并运行 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 秒)需要使用。这样,当有很多单元格时,处理时间可能会很长。

  • 模式二:

    在此模式中,将检索工作表中的所有单元格并将其转换为字符串值,然后转换字符串值。并且翻译后的值被放入工作表中。

    示例脚本:

    请将以下脚本复制并粘贴到电子表格的容器绑定(bind)脚本中。并运行 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 的情况下运行。

  • 引用:
  • Class LanguageApp
  • 关于google-apps-script - 使用谷歌翻译翻译整个谷歌表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60824929/

    相关文章:

    google-apps-script - Google 电子表格脚本 : Disable Other Users Form Adding, 删除或移动列

    javascript - Google Apps 脚本中的 "Shared Drive"支持

    Regexmatch 查找匹配多个单词的所有字符串单元格

    Javascript函数增加/减少cellValue

    google-sheets - Google 表格中的 ArrayFormula 和 "AND"公式

    javascript - 如何解析 Google App Script 中的 JSON 响应?

    google-apps-script - 获取对象 ScriptApp 的方法或属性 getAuthorizationInfo 时出现意外错误

    algorithm - 如何在 Google 表格中找到给定单元格的一致/不一致对的数量?

    string - 使用 VLOOKUP 在单元格中查找字符串文本

    arrays - 如何使用数组公式生成工资单条件