excel - 导出为 xlsx 的 Google 脚本不起作用
问题描述
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 文件包含数据。
删除我创建的要导出的临时文件的最后一行不起作用。该文件仍然存在于驱动器中,并且没有任何更改。
我到处寻找答案,但无法弄清楚。任何帮助将不胜感激。
解决方案
试试这个代码
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);
}
推荐阅读
- shell - 在 shell 命令中删除和替换文件
- azure - powerBI azure 客户端应用程序对其他应用程序的权限以进行报表嵌入
- iterm2 - 以编程方式清除 iterm2 缓冲区
- spring-boot - Spring CLI 问题 - 无法在 CLI 中列出 Spring Cloud 服务
- php - url的htaccess配置
- c++ - 如何设计一个带有可选随机种子参数的函数以传递给 mt19937
- c# - 如何在 ASP.NET MVC 5 项目中编写单元测试?
- wpf - 获取 new FrameworkElementFactory(typeof(T)) 创建的对象
- mysql - Laravel Vagrant SQL 备份
- c++ - 有没有办法让这个最短路径算法更快?