导出单个工作表并另存为工作表名称

时间:2019-06-13 02:27:40

标签: google-apps-script google-sheets google-apps-script-api

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

1 个答案:

答案 0 :(得分:1)

我没有使用URL的功能,因为您必须捕获新文档并更改名称。

我能做的是创建一个脚本函数,该脚本函数将使用工作表名称创建一个新文件,但是它将使用指定的文件夹ID将其存储在您的云端硬盘中,然后它将使用新的ID文件,它将创建一个URL,该URL将添加到A1: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);
}

我不是Apps Script的高手,但我可以使它发挥作用。希望这对您有所帮助,如果您不希望将文件发送到垃圾箱,只需从实用程序和setTrashed中删除两行即可。您可以保留文档,以便以后再从“垃圾箱”中删除它们,以避免使用驱动器空间,我找不到能够永久删除文件的方法,只是removeFile(),但这只是从驱动器中删除文件,显然它将仍然使用云端硬盘空间。

问候。