我有一个包含内容的源电子表格。
我有该内容的目标模板。
我选择并复制源电子表格中的内容。
我创建目标模板的副本并粘贴到源电子表格内容中。
然后我执行一些代码将目标模板导出为XLSX文件并将其附加到电子邮件中。
电子邮件和附件通过,但XLSX文件的内容与原始模板匹配 - 我粘贴的内容丢失。
然而,如果我拿出我的导出字符串并通过浏览器运行它,它就可以很好地导出XLSX文件了!
在内容粘贴完成之前,导出功能似乎正在运行,并且发送新创建的目标模板而没有内容。
我已经尝试过Utilities.sleep(30000),但无论我等多久,我总是得到原始模板的空白副本。 WTF?!
完整代码:
function sendVendor() {
// Open the Active Spreadsheet
var ssMaster = SpreadsheetApp.getActiveSpreadsheet();
var sheetInsert = ssMaster.getSheetByName('Insert RFQ');
var rfqNumber = sheetInsert.getRange('AW2').getValue();
var sheetWorkUp = ssMaster.getSheetByName('WORK UP');
var backgroundColor = '#FF5050';
var row = 11;
var newSheetRow = 13;
var numRows = 0;
var valuesPartNumbers = sheetWorkUp.getRange(12, 2, 233, 1).getValues();
var size = valuesPartNumbers.filter(function(value) { return value != '' }).length;
size = size - 1;
// Create the new RFQ from Template
var template = DocsList.getFileById('1M2f5yoaYppx8TYO_MhctEhKM_5eW-QCxlmJdjWg9VUs'); // Quote Workup Template
var newRFQ = template.makeCopy('Vendor RFQ Request ' + rfqNumber);
var newRFQId = newRFQ.getId();
var folderNew = DocsList.getFolder('Vendor RFQ Requests');
newRFQ.addToFolder(folderNew)
// Open new RFQ
var ssTemplate = SpreadsheetApp.openById(newRFQId);
var sheetVendorRequest = ssTemplate.getSheetByName('Vendor Request');
var newTemplateURL = ssTemplate.getUrl();
var needPricing = new Array();
var valuesFRCosts = sheetWorkUp.getRange(12, 8, size, 1).getValues();
for (var i = 0; i < valuesFRCosts.length; i++) {
row++;
if (valuesFRCosts[i][0] == '') {
var sheetWorkUpRow = sheetWorkUp.getRange(row, 1, 1, sheetWorkUp.getLastColumn());
sheetWorkUpRow.setBackground(backgroundColor);
var sendToTemplate = sheetWorkUp.getRange(row, 1, 1, 6).getValues();
sendToTemplate[0].splice(2, 1);
sheetVendorRequest.getRange(newSheetRow, 2, 1, 5).setValues(sendToTemplate);
newSheetRow++;
}
}
var url = 'https://docs.google.com/feeds/download/spreadsheets/Export?key=' + newRFQId + '&exportFormat=xlsx';
var doc = UrlFetchApp.fetch(url);
var attachments = [{fileName:'Vendor RFQ Request ' + rfqNumber, content: doc.getContent(),mimeType:"application/vnd.ms-excel"}];
MailApp.sendEmail("user@domain.com", "Excel Export Test", "See the attached Excel file.", {attachments: attachments});
}
答案 0 :(得分:2)
解决方案是在导出之前添加SpreadsheetApp.flush();
(在var url
之前)。复制后,SpreadsheetApp仍然被模板(在内存中)占用 - 刷新它,然后导出,强制脚本重新调用新的电子表格并获取最新数据。
谢谢Faustino Rodriguez。