从 Gmail 导入 XLS - sheet 基于昨天的日期

Import XLS from Gmail - sheet based on yesterdays date

我有以下脚本可以从我的电子邮件中导入 XLS 附件。

目前,它将其导入到指定的sheet名称中(在下面的示例中为“xxxx”)。

我希望它根据脚本 运行 的前一天导入到 sheet 名称(因为它在 DD/MM/YY 中报告前一天的数据]) 格式。

function ImportXLSFromGmail_Stats() {
  var sheetName = "xxxx";
  var threads = GmailApp.search("from:test@test.com subject:Email Subject");

  var messages = threads[0].getMessages();
  var message = messages[messages.length - 1];
  var attachment = message.getAttachments()[0];
  attachment.setContentTypeFromExtension();
  var data = [];
  (attachment.getContentType() == MimeType.MICROSOFT_EXCEL || attachment.getContentType() == MimeType.MICROSOFT_EXCEL_LEGACY)
    var tempFile = Drive.Files.insert({title: "temp_Availability", mimeType: MimeType.GOOGLE_SHEETS}, attachment).id;
    data = SpreadsheetApp.openById(tempFile).getSheets()[0].getDataRange().getValues();
    Drive.Files.trash(tempFile);
  if (data.length > 0) {
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
    sheet.getRange(1, 1, data.length, data[0].length).setValues(data);
  }
}

解释:

您想:

  • 获取昨天的日期:

    const date = new Date();
    date.setDate(date.getDate() - 1);
    
  • 将其格式化为 DD/MM/YY 并将其分配给 sheetName:

    const sheetName =  Utilities.formatDate(date, timezone, "dd/MM/YY")
    
  • 检查是否存在同名的sheet,否则创建:

    const sheets = ss.getSheets().map(sh=>sh.getName());
    if(!sheets.includes(sheetName)){
       ss.insertSheet(sheetName);
    };
    

解决方案:

function ImportXLSFromGmail_Stats() {
  const ss = SpreadsheetApp.getActive();
  const date = new Date();
  const timezone = ss.getSpreadsheetTimeZone();
  date.setDate(date.getDate() - 1);
  const sheetName =  Utilities.formatDate(date, timezone, "dd/MM/YY"); // logs 04/02/21  
  const sheets = ss.getSheets().map(sh=>sh.getName());
  if(!sheets.includes(sheetName)){
     ss.insertSheet(sheetName);
  };
  
  //
  // rest of your code
  //
  
}

参考文献: