function exportSpreadsheet() {
var destination = SpreadsheetApp.create('Temp');
var dest1 = destination.getActiveSheet().setName('출고입력 거래처정보(상단)');
var dest2 = destination.insertSheet('출고입력 폼목정보(하단)');
var source1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('출고입력 거래처정보(상단)').getDataRange();
var source2 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('출고입력 폼목정보(하단)').getDataRange();
var source1Data = source1.getValues();
var source2Data = source2.getValues();
var s1Rows = source1.getNumRows();
var s1Columns = source1.getNumColumns();
var s2Rows = source2.getNumRows();
var s2Columns = source2.getNumColumns();
// Copy Data to Temp file
for(var i = 0; i<s1Rows; i++){
for(var j = 0; j<s1Columns; j++) {
dest1.getRange(i+1,j+1).setValue(source1Data[i][j]);
}
}
for(var i = 0; i<s2Rows; i++){
for(var j = 0; j<s2Columns; j++) {
dest2.getRange(i+1,j+1).setValue(source2Data[i][j]);
}
}
// Export to xlsx
var ssID = destination.getId();
var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export"+"?format=xlsx";
var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var response = UrlFetchApp.fetch(url, params).getBlob();
// Save to drive
var folder = DriveApp.getFolderById('1vDFMM2EfRe1unR6hJOsKapfJrcwxRkxy');
folder.createFile(response).setName('출고.xlsx');
// Delete Temp file
DriveApp.getFilesByName('Temp').next().setTrashed(true);
}
我正在尝试从电子表格中导出两个标签,并将其另存为xlsx文件。在这样做时,我已将两个选项卡复制到新的电子表格,然后使用以下代码导出到xlsx。我已经阅读了几乎所有涉及通过Google Script导出到xlsx的帖子,并得出结论它们都是下面代码的变体。它似乎有效,但有两个问题:
它可以工作,但excel文件不包含数据,只有两个选项卡空。 URL工作正常,xlsx文件在下载时包含数据。
删除我为导出创建的临时文件的最后一行没有完成它的工作。该文件仍然存在于驱动器中,并且没有任何更改。
我到处寻找答案,但无法解决这个问题。任何帮助将不胜感激。
答案 0 :(得分:3)
尝试此代码
function exportSpreadsheet() {
var ssID = "yourID";
var url = "https://docs.google.com/spreadsheets/d/"+ssID+"/export"+
"?format=xlsx&"+
"size=0&"+
"fzr=true&"+
"portrait=false&"+
"fitw=true&"+
"gridlines=false&"+
"printtitle=true&"+
"sheetnames=true&"+
"pagenum=CENTER&"+
"attachment=true";
var params = {method:"GET",headers:{"authorization":"Bearer "+ ScriptApp.getOAuthToken()}};
var response = UrlFetchApp.fetch(url, params).getBlob();
var folder = DriveApp.getFolderById("YourFolder");
folder.createFile(response);
}
答案 1 :(得分:0)
在您的情况下,如何使用SpreadsheetApp.flush()
?例如,请将其如下所示。
// Export to xlsx
SpreadsheetApp.flush();
var ssID = destination.getId();
对于问题2,更新脚本后,我发现DriveApp.removeFile(DriveApp.getFilesByName('Temp').next())
已修改为DriveApp.getFilesByName('Temp').next().setTrashed(true)
。这样,Temp
的文件就会被放入垃圾箱。我想你已经知道了。
如果这不是你想要的,我很抱歉。