我有一个工作簿,里面有多张纸。 我已经设置了它,以便在主页上您可以单击工作表名称旁边的导出,然后将该工作表导出为 xls。有没有办法导出工作表并将其另存为该工作表名称而不是工作簿名称?
function getSheetUrl() {
var SS = SpreadsheetApp.getActiveSpreadsheet();
var ss = SS.getActiveSheet();
var url = 'https://docs.google.com/a/d/spreadsheets/d/Sheet ID/';
url += 'export?format=xlsx&gid=';
url += ss.getSheetId();
return url;
}
在 A49 中,我有:
https://docs.google.com/a/d.net/spreadsheets/d/SHEET ID/export?format=xlsx&gid=
然后在 D:D 中,我有工作表 ID 的
这就是生成 URL 的原因
=HYPERLINK(CONCATENATE($A$49,D32),"Export")
我不认为使用 URL 可以做到这一点,因为您必须捕获新文档并更改名称。
我能够做的是创建一个脚本函数,该函数将使用工作表的名称创建一个新文件,但它会将其存储在具有指定文件夹ID的驱动器中,然后它将获取新文件的id,并将创建一个将添加到A1的URL:A1单元格,供您下载带有工作表名称的新文档。1分钟后,文件将被发送到回收站。
function getSheetUrl() {
var SS = SpreadsheetApp.getActiveSpreadsheet();
var ss = SS.getActiveSheet();
var url = 'https://docs.google.com/spreadsheets/d/SpreadsheetId/';
url += 'export?format=xlsx&gid=';
url += ss.getSheetId();
var params = {
method: "GET",
headers: {
"authorization": "Bearer " + ScriptApp.getOAuthToken()
}
};
var response = UrlFetchApp.fetch(url, params).getBlob().setName(ss.getSheetName()).copyBlob();
var dir = DriveApp.getFolderById("FolderId");
var file = dir.createFile(response);
var id = file.getId();
ss.getRange("A1:A1").setValue("https://docs.google.com/uc?id=" + id + "&export=download");
Utilities.sleep(60000);
DriveApp.getFileById(id).setTrashed(true);
}
我不是应用程序脚本的大师,但这是我能够使其工作的方式。我希望这有所帮助,如果您不希望将文件发送到垃圾箱,只需从实用程序和 setRashed 中删除 2 行即可。您可以保留文档以便以后从垃圾箱中删除它们,以避免使用您的驱动器空间,我找不到一种永久删除文件的方法,只是 removeFile(),但这只是从驱动器中删除文件,显然它仍然会使用驱动器空间。
问候。