繁体   English   中英

连接工作表中的一系列单元格后的额外逗号

[英]Extra commas after concatenating a range of cells in Sheet

供参考:这是我的 Google Form

这是与我的 Google 表单的 output 相关联的 Google PE 空白表(答案将在表单响应 2 选项卡上的 output 上)。


我已经建立了一个能够收集大量数据的 Google 表单。 它应由为新员工申请 SAP 权限的经理填写。

他们继续填写表格并输入他们的主要部门(SAP 流),这将引导他们进入下一页/部分,允许经理检查员工所需的权限是什么。

有时,员工会与多个部门进行交互,因此第二页上存在支持/辅助 SAP Stream 的选项。 这可以根据需要继续进行,直到员工的所有必要角色/权限都收集到 Google 表格中。

在工作表中,您将看到:

  • AF 列包含基本信息
  • 列 HT 用于工作职责
  • U-AG 列是支持 SAP Stream 的信息范围
  • AH-AT 列是支持 SAP Stream 的工作职责
  • AU-BG 列收集辅助支持 SAP Stream

我构建了谷歌脚本语言来收集变量中的每一个信息位,然后这些变量将被声明为全局变量,以便它们可以传递到应用程序脚本中的 HTML 页面。

最后,由该 HTML 页面组成的 email 将发送给负责指定 SAP 权限的经理。

自从我上次更新以来,一切都运行良好。 email 被发送出去,变量正在收集我所针对的单元格范围内的信息。 但是 output 充满了分隔返回值的逗号。

email 结果截图

是否包含并用逗号分隔没有任何内容的单元格? 还是我的变量做错了什么?


编辑:

这是我的代码的一些相关部分的示例:

function sendEmail_v3() {

  // get the spreadsheet information
  const ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  //const responseSheet = ss.getSheetByName('Form Responses 1');
  const data = ss.getDataRange().getValues();
  //console.log(data);



  // Loop over the rows
  data.forEach((row,i) => {

    // Identify whether notification has been sent
    if (row[59] === '') {

      // Get the Form info
      var emailTo = "xxxxxx@gmail.com"
      var subject = 'SAP Role Request Subject';
      const Timestamp = row[0];
      var emailAddress = row[1];
      var name = row[2];
      var department = row[3];
      var userID = row[4];
      var SAP_Stream = row[5];
      var valuesA = ss.getRange(i,8,1,13).getValues();
      var jobResponsibilities = valuesA;
      var valuesB = ss.getRange(i,21,1,13).getValues();
      var supportingSAP = valuesB;
      var valuesC = ss.getRange(i,34,1,13).getValues();
      var secondaryJob = valuesC;
      var valuesD = ss.getRange(i,47,1,13).getValues();
      var secondarySAP = valuesD;




 formTime = Timestamp;
  formEmail = emailAddress;
  formName = name;
  formUserID = userID;
  formSAP_Stream = SAP_Stream;
  formDepartment = department;
  formResponsibilities = jobResponsibilities;
  formSupportingSAP = supportingSAP + "," + secondarySAP;
  formSecondaryJob = secondaryJob;

  let body = '';

  // Write the email in email.html
    var html = HtmlService.createTemplateFromFile("email.html");
    var htmlText = html.evaluate().getContent();
    var options = {htmlBody: htmlText};
  
  // Send the email
  GmailApp.sendEmail(emailTo,subject,'',{htmlBody: htmlText});

  // Mark as Notified
  const g = 'Notification sent';
  ss.getRange(i + 1,60).setValue(g);

  }
});
}

全局变量在 HTML 文件中被拉入 Google 脚本的单独部分,该文件在 email 中发送。 生成的 email 如下所示:

email 结果截图

我想还有另一个 function 或一些代码我可以添加到带有值变量的行中,这将有助于避免 NULL 结果。

var valuesA = ss.getRange(i,8,1,13).getValues();

您可以改用filterconcatjoin 在您的情况下,由于数据也是二维数组,因此您还需要在使用concat之前对它们进行flat处理。 检查下面的代码。 使用concat而不是直接使用+添加 2 arrays 。 我在Logs 和 Output部分比较了你的和下面的代码:

代码:

formSupportingSAP = supportingSAP.flat().concat(secondarySAP.flat()).filter(Boolean).join(", ");

日志和 Output:

日志和输出

参考/注释:

  • flat()获得等效的一维数组
  • concat()组合 2 个 arrays
  • filter()过滤掉空白单元格
  • join()用分隔符", "组合成一个字符串

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM