Экспорт одного листа и сохранение в качестве имени листа - PullRequest
0 голосов
/ 13 июня 2019

У меня есть рабочая тетрадь с несколькими листами. Я настроил его так, чтобы на главной странице вы могли нажать кнопку экспорта рядом с именем листа, и он экспортирует этот лист в 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;
}

В А49 у меня есть:

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 Ответ

1 голос
/ 13 июня 2019

Я не думаю, что это можно сделать с помощью 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, но мне удалось заставить его работать. Надеюсь, это поможет, если вы не хотите, чтобы файл отправлялся в корзину, просто удалите 2 строки из утилит и setTrashed. Вы можете сохранить документы для последующего их удаления также из Корзины, чтобы избежать использования места на диске. Мне не удалось найти метод, который удаляет файл навсегда, только removeFile (), но это просто удаляет файл с диска и, по-видимому, будет по-прежнему использовать место на диске.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...