GAS - Выбрать (Получить) электронную таблицу для каждого ввода GForm

Мой первый вопрос в переполнении стека. У меня есть Google Spreadsheet с 4 отдельными листами.

Sheet1 - это ответы от GForm. Листы 2,3,4 имеют те же данные, но на 3 языках: английском, тамильском, хинди и названном английском, тамильском, хинди.

В настоящее время сценарий берет дату значения ячейки из Sheet1, сопоставляет данные на языке Tamil, почта объединяется с правильным языком Tamil GDoc и отправляет его по электронной почте.

Теперь я не могу понять, как заставить сценарий выбрать другой язык Gsheet, один из 3, в зависимости от значений evalues4 из ввода формы, который является переключателем.

Может кто-нибудь помочь мне разобраться? Выберите соответствующий язык Gsheet, используя ss.getSheetByName, и GDoc, используя DriveApp.getFileById, основываясь на evalues4 ответа формы.

Вот код, который работает нормально, если я ввожу только один язык по имени /sheetID/DocID.

//Get information from the form and set as variables 
function onFormSubmit(e) 
{ 
var Time = e.values[0];
var email = e.values[1];
var fog = e.values[2];
var mog = e.values[3];
var lang = e.values[4];
var do_date = e.values[5];

//Match chosen date from data sheet & get Row Number
function findInColumn() {
var data = do_date;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet1 = ss.getSheetByName("Tamil");
var range = sheet1.getRange(1,1,sheet1.getLastRow(),1);
var values= range.getValues();
var row = 0;
   while ( values[row] && values[row][0] !== data ) {
    row++;
  }
    if (values[row][0] === data) 
    return row+1;
  else 
    return -1;
}  

//Use above Row number to load in Range, get values, assign to variable cells
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet3 = ss.getSheetByName("Tamil");
// Get range of cells in All columns and All rows with entries
var dataRange = sheet3.getRange(findInColumn(), 1, 1, sheet3.getLastColumn());
// Get entries for each row in the Range.
var data = dataRange.getValues();
 // Set each value to a unique variable
  for (i in data) {
    var cell = data[i];

// Get document template, copy it as a new doc with Name and email, and save the id
var copyId = DriveApp.getFileById("1Nxxxxxxxxxxxxxx2k")

2 ответа

Решение

Извините, совсем забыл, что я задал вопрос здесь. Я решил это в те же выходные, используя If - else [Примечание: вместо var ss я использовал var ssn, а вместо var sheet3 я использовал var tocopyID при перезаписи]

    //Use above Row number to load in Range, get values, assign to variable cells
 var ss = SpreadsheetApp.getActiveSpreadsheet();
  if (lang === "Tamil"){ 
    var ssn = ss.getSheetByName("Tamil");
    var tocopyId = DriveApp.getFileById("1NxxxxTamil");
  }
  else if (lang === "Hindi"){ 
   var ssn = ss.getSheetByName("Hindi"); 
   var tocopyId = DriveApp.getFileById("Hindi");
  }
  else if (lang === "English"){ 
   var ssn = ss.getSheetByName("English"); 
   var tocopyId = DriveApp.getFileById("1NxxxxEnglish");
  }

Вы можете использовать переменную lang, чтобы получить правильный лист, так как они имеют одинаковое имя. Подобно:

var sheet1 = ss.getSheetByName(lang); // where lang = "Tamil" for example

Для использования правильного шаблона вы можете сохранить идентификатор вашего шаблона с такими свойствами, как:

var templateId = PropertiesService.getScriptProperties().getProperty(lang); // where lang = "Tamil" for example
var copyId = DriveApp.getFileById(templateId);

Где у вас есть свойства с именем языка, который вы хотите. Вы можете установить их с помощью кода:

PropertiesService.getScriptProperties().setProperty('Tamil', '1Nxxxxxxxxxxxxxx2k');
Другие вопросы по тегам