0

我有一个包含多张工作表的工作簿。我已经进行了设置,以便在主页上您可以单击工作表名称旁边的导出,并将该工作表导出到 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:DI 中有工作表 ID

这就是生成 URL 的原因

=HYPERLINK(CONCATENATE($A$49,D32),"Export")
4

1 回答 1

0

我不能通过使用 URL 来完成,因为您必须捕获新文档并更改名称。

我能够做的是创建一个脚本函数,该函数将使用工作表的名称创建一个新文件,但它将使用指定的文件夹 ID 将其存储在您的驱动器中,然后它将获取新文件的 id 和它将创建一个将添加到 A1:A1 单元格的 url,供您下载具有工作表名称的新文档。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);
}

我不是 Apps Script 的大师,但我能够让它发挥作用。我希望这会有所帮助,如果您不希望将文件发送到垃圾箱,只需从实用程序中删除 2 行和 setTrashed 行。您可以保留文件以便以后从垃圾箱中删除它们以避免使用您的驱动器空间,我无法找到一种方法可以永久删除文件,只是 removeFile() 但这只是从驱动器中删除文件,显然它会仍然使用驱动器空间。

问候。

于 2019-06-13T03:44:43.493 回答