- Vous souhaitez traduire le japonais en anglais pour toutes les cellules de toutes les feuilles d'une feuille de calcul.
- Vous souhaitez copier la feuille contenant les valeurs traduites dans la même feuille de calcul.
- Vous souhaitez y parvenir en utilisant le script de Google Apps.
Je pourrais comprendre ce qui précède. Si ma compréhension est correcte, que pensez-vous de cette réponse ? Il s'agit d'une réponse parmi d'autres.
Dans cette réponse, la classe LanguageApp est utilisée.
Modèle 1 :
Dans ce schéma, chaque cellule est traduite avec LanguageApp.translate()
.
Exemple de script :
Veuillez copier et coller le script suivant dans le script de la feuille de calcul. Et exécutez myFunction
dans l'éditeur script. Ainsi, toutes les cellules de toutes les feuilles du tableur sont traduites du japonais à l'anglais. Et les valeurs traduites sont placées dans la feuille insérée dans la même feuille de calcul.
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);
});
}
- Dans ce cas, chaque cellule est traduite. D'après la spécification,
Utilities.sleep(1000)
(1 seconde d'attente) doit être utilisé. Ainsi, lorsqu'il y a beaucoup de cellules, le temps de traitement peut être long.
Modèle 2 :
Dans ce modèle, toutes les cellules d'une feuille sont récupérées et converties en une valeur de chaîne, puis la valeur de chaîne est traduite. Les valeurs traduites sont ensuite placées dans la feuille.
Exemple de script :
Veuillez copier et coller le script suivant dans le script de la feuille de calcul. Et exécutez myFunction
dans l'éditeur script. Ainsi, toutes les cellules de toutes les feuilles du tableur sont traduites du japonais à l'anglais. Et les valeurs traduites sont placées dans la feuille insérée dans la même feuille de calcul.
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);
});
}
- Dans ce cas, les valeurs de toutes les cellules sont traduites par une demande de
LanguageApp.translate()
. Ainsi, la durée du processus sera plus courte que celle du modèle 1. Mais si les valeurs sont élevées, une erreur peut se produire. Je n'en suis pas certain. Je m'en excuse.
- Dans le script ci-dessus,
#
est utilisé comme délimiteur pour la conversion en valeur de chaîne. Si le #
est utilisé dans les cellules, veuillez changer le caractère.
Remarque :
- Ce script modifié est exécuté avec l'activation de V8.
Référence :