【问题标题】:GAS - Select (Get) Spreadsheet per GForm inputGAS - 每个 GForm 输入选择(获取)电子表格
【发布时间】:2017-05-22 13:42:34
【问题描述】:

我在 Stack Overflow 中的第一个问题。 我有一个带有 4 个单独工作表的 Google 电子表格。

Sheet1 是来自 GForm 的响应。 Sheet2,3,4 具有相同的数据,但有 3 种语言 English、Tamil、Hindi 并命名为 English、Tamil、Hindi。

目前脚本从 Sheet1 获取单元格值日期,匹配泰米尔语表中的数据,邮件与正确的泰米尔语 GDoc 语言合并并通过电子邮件发送。

现在,我无法弄清楚如何让脚本根据表单输入中的 evalues4(单选按钮)选择一种不同的语言 Gsheet(三种语言之一)。

有人可以帮我弄清楚吗? 选择合适的语言 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")

【问题讨论】:

  • “ss.getSheetByName(lang)”怎么样,其中 lang 是“var lang = e.values[4]”
  • 您找到解决问题的方法了吗?

标签: google-apps-script google-sheets google-docs mailmerge


【解决方案1】:

抱歉,完全忘记了我在这里提出的问题。我在同一个周末解决了它,通过使用 If - else [注意:我使用 var ssn 代替 var ss,在重写中我使用 var tocopyID 代替 var sheet3]

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

【讨论】:

  • 完成,感谢您引导我了解礼仪和耐心。
【解决方案2】:

您可以使用 lang 变量来获取正确的工作表,因为它们具有相同的名称。喜欢:

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

为了使用正确的模板,您可以使用Properties 存储模板的 id,例如:

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

您可以在其中使用所需的语言名称设置属性。您可以使用代码设置它们:

PropertiesService.getScriptProperties().setProperty('Tamil', '1Nxxxxxxxxxxxxxx2k');

【讨论】:

    猜你喜欢
    • 2017-09-19
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 2022-11-22
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    相关资源
    最近更新 更多