簡體   English   中英

更改電子表格上的單元格數據

[英]Change cell Data on Spreadsheet

我正在嘗試獲取模板電子表格並復制它,然后更改數據並導出為 pdf,最后是 email。

到目前為止,我可以做所有事情,除了在工作表上更改它。 它甚至在記錄器中發生變化。 有人可以幫忙嗎?

代碼如下:

function After_Submit(e, values){
    var range = e.range;
    var row = range.getRow(); //get the row of newly added form data
    var sheet = range.getSheet(); //get the Sheet
    var headers = sheet.getRange(1, 1, 1,5).getValues().flat(); //get the header names from A-O
    var data = sheet.getRange(row, 1, 1, headers.length).getValues(); //get the values of newly added form data + formulated values
    var values = {}; // create an object 
    for( var i = 0; i < headers.length; i++ ){
      values[headers[i]] = data[0][i]; //add elements to values object and use headers as key
    }
  
    
    const pdfFile = Create_PDF(values);
    sendEmail(e.namedValues['Your Email'][0],pdfFile);
  }
  
  function sendEmail(email,pdfFile,){
    
    GmailApp.sendEmail(email, "Subject", "Message", {
      attachments: [pdfFile], 
      name: "From Someone"
  
    });
   
  }
 function Create_PDF(values, ) {
    const PDF_folder = DriveApp.getFolderById("1t_BYHO8CqmKxVIucap_LlE0MhslpT7BO");
    const TEMP_FOLDER = DriveApp.getFolderById("1TNeI1HaSwsloOI4KnIfybbWR4u753vVd");
    const PDF_Template = DriveApp.getFileById('1Ye7DyJQOjA3J_EUOQteWcuASBCfqlA-_lzyNw0REjY8');
    
    const newTempFile = PDF_Template.makeCopy(TEMP_FOLDER);
    const  openDoc = SpreadsheetApp.openById(newTempFile.getId());
    const newOpenDoc = openDoc.getSheetByName("Sheet1");
    var body = newOpenDoc.getDataRange().getValues();
    for (const key in values) {
    body = body.toString().replace("{{"+key+"}}", values[key]);
    }
    Logger.log(body);
    newOpenDoc.getDataRange().setValues(body);
  
    SpreadsheetApp.flush();
  
    const BLOBPDF = newTempFile.getAs(MimeType.PDF);
    const pdfFile =  PDF_folder.createFile(BLOBPDF);
    console.log("The file has been created ");
    return pdfFile;
}

當我看到您的腳本時,在 function Create_PDF的 for 循環中,從工作表中檢索到的數組被轉換為字符串。 我認為這可能是您的問題的原因。

當這個問題被刪除后,接下來的修改如何?

從:

var body = newOpenDoc.getDataRange().getValues();
for (const key in values) {
body = body.toString().replace("{{"+key+"}}", values[key]);
}

至:

values = Object.fromEntries(Object.entries(values).map(([k, v]) => [`{{${k}}}`, v]));
var body = newOpenDoc.getDataRange().getValues().map(r => r.map(c => values[c] || c));
  • 通過這種修改,按值轉換的values被放入表中。

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM