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