2013-11-29 3 views
2

Я добавил новый элемент меню в таблицу, используя скрипт Google Apps. Этот пункт меню создает файл, но я хотел бы, чтобы он инициировал загрузку файла после его создания.Инициировать загрузку из скрипта Google Apps

Возможно ли это?

Помните, что это не веб-приложение, а пункт меню в моей таблице.

Благодаря

Edit:

Благодарности к предложению Сержа INSAS', следующий простой скрипт работает отлично, и открывает окно загрузки со ссылкой мне нужно:

function onOpen() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var csvMenuEntries = [ {name: "Zip all CSVs", functionName: "saveAsCSV"} ]; 
    ss.addMenu("CSV", csvMenuEntries); 
}; 

function saveAsCSV() { 
    var folder = createCSVs(); // creates a folder with CSV for each Sheet 
    var zipFile = zipCSVs(folder, "DI.zip"); // creates a zip of all CSVs in folder 

    var ui = UiApp.createApplication().setTitle("Download"); 
    var p = ui.createVerticalPanel(); 
    ui.add(p); 
    p.add(ui.createAnchor("Download", zipFile.getDownloadUrl())); 
    SpreadsheetApp.getActive().show(ui) 
} 
+0

Если позволите, я думаю, что setWidth и setHeight действительно полезен в таком интерфейсе, потому что он немного пуст, не так ли? –

+0

Да, но я использую его сам, так что это не имеет большого значения. Но спасибо. – tbkn23

+0

Anchor устарела видеть мое обновленное решение в [аналогично SO вопрос] [1] [1]: http://stackoverflow.com/questions/14021597/how-to-download- created-csv-file-using-google-apps-script/31973529 # 31973529 – vish

ответ

4

EDIT: прочитайте комментарии ниже, Зиг Мандель совершенно прав, когда он указывает ограничения «сложная» версия, это было действительно простое (и забавное) упражнение, чтобы показать другие методы.


Я думаю, вам нужно будет использовать промежуточный Ui в качестве всплывающего окна для подтверждения загрузки. После этого есть два возможных способа, которые я знаю, один очень прост, а другой довольно громоздкий, сделайте свой выбор, приведенный ниже код показывает их оба.

примечание: использовать сложный, который вам требуется для развертывания вашего приложения (т. Е. Сохранить версию и развернуть как webapp), для простого просто используйте ее «как есть». (Я покажу простую в комментариях к коду).

Код:

function onOpen() { 
    var menuEntries = [ {name: "test download", functionName: "downloadFile"} 
        ]; 
    var sheet = SpreadsheetApp.getActiveSpreadsheet(); 
    sheet.addMenu("Utils",menuEntries); 
} 

function downloadFile(){ 
    var file = DriveApp.createFile('test file', 'Some content in this file to test it'); 
    var fileID = file.getId(); 
    var fileName = file.getName(); 
    var ui = UiApp.createApplication().setTitle('Download'); 
    var url = ScriptApp.getService().getUrl()+'?&ID='+fileID+'&name='+fileName; 
    var p = ui.createVerticalPanel(); 
    ui.add(p); 
    p.add(ui.createAnchor('click to download', url)); 
    p.add(ui.createAnchor('or use this link ',file.getDownloadUrl()));// this is the simple one, just get the file you created and use getDownloadUrl() 
    SpreadsheetApp.getActive().show(ui) 
} 

function doGet(e){ 
    var fileId = e.parameter.ID; 
    var fileName = e.parameter.name; 
    var fileString = DocsList.getFileById(fileId).getContentAsString(); 
    return ContentService.createTextOutput(fileString).downloadAsFile(fileName); 
} 

PS: У меня было некоторое удовольствие писать это, «сложный вариант» действительно смешно :-) имхо

+1

Первая версия хорошая. Нет необходимости использовать вторую версию, плюс она работает только для текстовых файлов. Пользователь может создавать что-то вроде pdf (вы могли бы улучшить его, чтобы он служил файловому блобу вместо его текстового содержимого), но у вас не будет никакого преимущества перед файлом –

+0

, вы правы, но, как я уже сказал, я просто для удовольствия ;-) –

+0

Хм, удалось запутаться во всех методах, я не очень хорошо знаком с API-интерфейсами скриптов Google Apps ... Я пробовал это, но ничего не происходит: var ui = UiApp.createApplication(). setTitle ("Скачать"); var p = ui.createVerticalPanel(); ui.add (p); p.add (ui.createAnchor («Загрузить», zipFile.getDownloadUrl())); – tbkn23

Смежные вопросы