我正在嘗試從模板生成報告。這是我的作業流程:
- 從我的模板表復制一份
- 從其他作業表追加資料
- 設定邊框(現階段問題)
- 將此檔案轉換為 PDF 檔案并作為 blob 檔案存盤在常量中
- 將此檔案轉換為 Excel 檔案并作為 blob 檔案存盤在常量中
- 在新函式中發送 blob 常量以將 blob 作為郵件發送
- 洗掉復制的模板
問題出在第 3 步。它設定了邊框,但在第 5 步之后。這意味著 blob 檔案沒有邊框,但復制的模板檔案有邊框(我在洗掉檔案之前檢查)。結果,電子郵件附件無邊框。
你可以在這里看到我的代碼:
/**
* To add grid to the excel file
*/
function setGridToFile(id) {
var ss = SpreadsheetApp.openById(id).getSheetByName('Feuil');
ss.getRange(4, 1, ss.getLastRow() - 3, ss.getLastColumn()).setBorder(true, true, true, true, true, true);
return id;
}
// To create report of one product and return 2 file as blob
function createReportForEachItem() {
var data = [['Thibaud', 'DU MERLE', 'Examen wset 2 à Paris', 17/12/2021, '09h00-10h00', 1, 36.0], ['Christine', 'Meyer-Wachsmuth', 'Examen wset 2 à Paris', 17/12/2021, '09h00-10h00', 1, 42.0]]
// Script stop if there is no data in the summery sheet
if(data.length === 0) { return 'No data in summery sheet!' }
// Create a duplicate from template file
var finalReport = DriveApp.getFileById('1Oi2mwvZlhCIDUWEGae0Z8QlF_adS8hTXQS69WrSPaj8').makeCopy('ParticipantsLists_', DriveApp.getRootFolder()).getId();
// var frs = SpreadsheetApp.openById(finalReport);
var total = 0;
var rowList = [];
// Sort the data based on the time column
data.sort(function(a, b) {
if(a[4] > b[4])
return 1;
else if(a[4] < b[4])
return -1;
return 0;
});
Logger.log('5');
// Append the data in the template
data.map(function(item) {
SpreadsheetApp.openById(finalReport).appendRow([item[0], item[1], item[5], item[2], item[3], item[4]]);
total = parseInt(item[5]);
rowList.push(item[6]);
});
Logger.log('6');
// Add Total quantity and table border
SpreadsheetApp.openById(finalReport).appendRow(['', 'TOTAL', total]);
Logger.log('7');
// Add Grid/border
var setGrid = setGridToFile(finalReport);
Logger.log(setGrid);
// Convert PDF file, rename and save as xlsx
var finalPdfReport = SpreadsheetApp.openById(setGrid).getAs('application/pdf').setName(data[0][2] '.pdf');
var blobFileReturn = [finalPdfReport, convertSheetAsXlsx(setGrid, data[0][2] '_' data[0][3])[0]];
Logger.log('8');
// Add status "Yes" in column G
rowList.map(function(row) {
SpreadsheetApp.getActive().getSheetByName('Participants lists').getRange(row, 7, 1, 1).setValue(['YES']);
});
Logger.log('9');
return [blobFileReturn, [finalReport]];
}
uj5u.com熱心網友回復:
有時將電子表格操作捆綁在一起以提高性能,例如在多次呼叫 Range.getValue() 時。但是,有時您可能希望確保立即進行所有掛起的更改,例如在腳本執行時顯示用戶資料。
要應用所有掛起的電子表格更改,請執行flush().
您可以將它放在 之后setGridToFile或之前var finalPdfReport ...。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/379792.html
上一篇:簡化保護腳本
下一篇:PDF附件損壞
