Google 工作表使用脚本将一列转换为另一列

Google Sheets Translate a column to another column with Script

This 脚本将 sheet 中的所有文本从日语翻译成英语到另一个选项卡。

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);
  });
}

相反,要翻译 A 列并将结果放入 B 列,同时不修剪空白单元格,在这种情况下脚本会怎样?

解释:

您的目标是将 A 列从日语翻译成英语,将结果放入 B 列并保留空白单元格。

  • 我也通过不翻译空单元格做了一个小改进:

    return [ c!=''?LanguageApp.translate(c, "ja", "en"):''];

    这会稍微提高算法的性能。

  • 在我的例子中,鉴于它只有一列和小数据集,我不需要使用 Utilities.sleep(1000); 但如果您发现脚本有问题,请随时添加它。

解决方案:

仅适用于名称为Sheet1的sheet:

function myFunction() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');
  const values = sheet.getRange('A1:A'+ sheet.getLastRow()).getDisplayValues().flat();
  const translatedValues = values.map(c=>{
//        Utilities.sleep(1000); // use it if you see errors in the script    
        return [ c!=''?LanguageApp.translate(c, "ja", "en"):''];
    });
  sheet.getRange(1,2,translatedValues.length).setValues(translatedValues);
}

应用于所有 sheets:

 function myFunction() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const sheets = ss.getSheets();
  sheets.forEach(sheet => {
    const values = sheet.getRange('A1:A'+ sheet.getLastRow()).getDisplayValues().flat();
    const translatedValues = values.map(c=>{
//        Utilities.sleep(1000); // use it if you see errors in the script
        return [ c!=''?LanguageApp.translate(c, "ja", "en"):''];
    });
    sheet.getRange(1,2,translatedValues.length).setValues(translatedValues);
  });
}