簡體   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