我使用以下脚本将多个 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。
在您的情况下,作为一种方法,将公式转换为单元格值怎么样?当这反映在你的脚本中时,它会变成如下所示。
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);
}