使用谷歌翻译翻译整个谷歌工作表



我有一张用日语写的谷歌表格。我需要把它转换成英语。

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

但如果没有脚本,这就迫使我翻译每一行。我需要一个脚本,将我的整个谷歌工作表转换成英语。

我更喜欢把它换成一张单独的纸。请告诉我可能的解决方案。

TIA-

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

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 Sheets文档添加了一个菜单。你可以随心所欲地翻译,根据需要翻译多种不同的语言。只需扩展菜单或替换已有的项目。

理解

  • 您希望将电子表格中所有工作表的所有单元格的日语翻译为英语
  • 您希望将具有转换值的图纸复制到同一电子表格中
  • 你想使用谷歌应用程序脚本来实现这一点

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

模式1:

在这种模式中,每个单元格都用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的情况下运行的

参考:

  • 类语言应用程序

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

我在A1单元格上创建了一个新的表格,我放了一个公式:

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

这给了我A1细胞从Sheet1的翻译。

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

然而,谷歌翻译在谷歌表单中将俄语翻译成英语方面相当糟糕,所以我不得不通过剪切Sheet2中的所有单元格并粘贴"来改变它;仅值";再次返回。这为您提供了可以修改的已翻译单元格。

相关内容

  • 没有找到相关文章

最新更新