我有一张用日语写的谷歌表格。我需要把它转换成英语。
我知道我们可以用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
中的所有单元格并粘贴"来改变它;仅值";再次返回。这为您提供了可以修改的已翻译单元格。