以 Excel 附件形式发送电子邮件时 #REF 数据出现数据错误(电子邮件附件工作正常)

问题描述 投票:0回答:1

我使用以下脚本将多个 Google 表格作为附件发送到一封电子邮件中,直到几天前它都工作得很好。

这是代码:

function sendExcelAttachmentsInOneEmail() {
  var sheets = ['OH INV - B2B', 'OH INV - Acc', 'OH INV - B2C', 'B2B', 'ACC', 'B2C'];
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();
  var spreadSheetId = spreadSheet.getId();

  var urls = sheets.map(sheet => {
    var sheetId = spreadSheet.getSheetByName(sheet).getSheetId();
    // Used this alternative url since I'm getting the error below. This other url has less traffic issues during testing:
    // "This file might be unavailable right now due to heavy traffic. Try again."
    return `https://docs.google.com/feeds/download/spreadsheets/Export?key=${spreadSheetId}&gid=${sheetId}&exportFormat=xlsx`;
  });

  var reportName = spreadSheet.getSheetByName('IMEIS').getRange(1, 14).getValue();

  var params = {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
    },
    // Add mute http exceptions to proceed
    muteHttpExceptions: true
  };

  var fileNames = ['OH INV - B2B.xlsx',
                   'OH INV - Acc.xlsx',
                   'OH INV - B2C.xlsx',
                   'B2B.xlsx',
                   'ACC.xlsx',
                   'B2C.xlsx'];

  var blobs = urls.map((url, index) => {
    // Added an interval due to heavy traffic error. Increase interval if needed.
    Utilities.sleep(10000);
    return UrlFetchApp.fetch(url, params).getBlob().setName(fileNames[index]);
  });


  var message = {
    to: '[email protected]',
    cc: '[email protected]',
    subject: 'Combined - REPORTS - ' + reportName,
    body: "Hi Team,\n\nPlease find attached Reports.\n\nBest Regards!",
    attachments: blobs
  }

  MailApp.sendEmail(message);
}

我面临的问题: 这些结局表上的数据(我作为电子邮件附件发送)来自使用 Google QUERY() 函数的不同表,如下所示:

=IF(Sheet11!H1<0,"-VE Stock Qty", query('INV SHEET'!A3:E,"SELECT * WHERE A IS NOT NULL",0))

在Google Sheet中,数据总是显示完美且完整。

当我使用上面的脚本发送电子邮件时,它会以 Excel 附件的形式发送,但数据/查询功能会被 #REF 错误替换,如下面的片段所示:

请帮忙解决这个问题。

注意:我也尝试了许多不同的脚本,所有脚本都以附件形式发送电子邮件,但数据文件附件中出现相同的错误#REF。

google-sheets google-apps-script
1个回答
0
投票

在您的情况下,作为一种方法,将公式转换为单元格值怎么样?当这反映在你的脚本中时,它会变成如下所示。

修改后的脚本:

function sendExcelAttachmentsInOneEmail() {
  var sheets = ['OH INV - B2B', 'OH INV - Acc', 'OH INV - B2C', 'B2B', 'ACC', 'B2C'];
  var spreadSheet = SpreadsheetApp.getActiveSpreadsheet();


  // --- I added the below script.
  spreadSheet = spreadSheet.copy("temp");
  spreadSheet.getSheets().forEach(sheet => {
    var range = sheet.getDataRange();
    range.copyTo(range, { contentsOnly: true });
  });
  SpreadsheetApp.flush();
  // ---


  var spreadSheetId = spreadSheet.getId();

  var urls = sheets.map(sheet => {
    var sheetId = spreadSheet.getSheetByName(sheet).getSheetId();
    // Used this alternative url since I'm getting the error below. This other url has less traffic issues during testing:
    // "This file might be unavailable right now due to heavy traffic. Try again."
    return `https://docs.google.com/feeds/download/spreadsheets/Export?key=${spreadSheetId}&gid=${sheetId}&exportFormat=xlsx`;
  });

  var reportName = spreadSheet.getSheetByName('IMEIS').getRange(1, 14).getValue();

  var params = {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer ' + ScriptApp.getOAuthToken()
    },
    // Add mute http exceptions to proceed
    muteHttpExceptions: true
  };

  var fileNames = ['OH INV - B2B.xlsx',
                   'OH INV - Acc.xlsx',
                   'OH INV - B2C.xlsx',
                   'B2B.xlsx',
                   'ACC.xlsx',
                   'B2C.xlsx'];

  var blobs = urls.map((url, index) => {
    // Added an interval due to heavy traffic error. Increase interval if needed.
    Utilities.sleep(10000);
    return UrlFetchApp.fetch(url, params).getBlob().setName(fileNames[index]);
  });


  var message = {
    to: '[email protected]',
    cc: '[email protected]',
    subject: 'Combined - REPORTS - ' + reportName,
    body: "Hi Team,\n\nPlease find attached Reports.\n\nBest Regards!",
    attachments: blobs
  }

  MailApp.sendEmail(message);
  

  // Added
  DriveApp.getFileById(spreadSheetId).setTrashed(true);
}
  • 通过此修改,公式将转换为单元格值。

参考:

© www.soinside.com 2019 - 2024. All rights reserved.