1

Я создал приложение Google Apps Script (GAS), привязанное к файлу Google Sheet (s). Приложение имеет этиGoogle Picker/PickerBuilder: я бы хотел, чтобы он работал, как диалог сохранения файлов Microsoft Word/Excel для сохранения нового файла.

Code.gs 
Example.html 

файлы. Эта диаграмма

enter image description here

показывает общий поток для сохранения файла особенность, которую я хочу построить. В файле example.html, элемент управления HTML вызывает функцию saveSheet()

function saveSheet() { 
    google.script.run.withFailureHandler(callBackFailure) 
    .withSuccessHandler(getOAuthToken) 
    .funcSaveSheet(); 
} 

, который сразу же вызывает функцию Code.gs funcSaveSheet(), в основном осталось в этом вопросе, чтобы сэкономить место.

function funcSaveSheet() { 

    . . . . . 
    . . . . . 
    . . . . . 
    . . . . . 

    var blob = response.getBlob().setName(localSpreadSheet.getName() + ' - ' + 
     sheet.getName() + '.pdf'); 

    // This line shows that the function actually writes a file to Google Drive: 

    folder.createFile(blob); 
    finishedDoc = response.getContent(); 

    return finishedDoc; 
} 

Функция funcSaveSheet() создает новый файл на Google Диске. Обратите внимание, что функция funcSaveSheet() имеет

folder.createFile(blob); 

линия (вблизи дна) только, чтобы доказать, что общее приложение может записать файл на Google Диск. Все это работает. Теперь, одна строка в функции saveSheet() выше

google.script.run.withFailureHandler(callBackFailure) 
.withSuccessHandler(getOAuthToken) 
.funcSaveSheet(); 

рядом вызывает функцию getOAuthToken()

function getOAuthToken(docContentParam) { 
    google.script.run.withFailureHandler(showError) 
    .withSuccessHandler(createPicker) 
    .getOAuthToken1(docContentParam); 
    } 

также находится в файле example.html. Это также работает. Приложение ГАЗ использует все эти

google.script.run.withFailureHandler(). WithSuccessHandler(). {функции вызова}

линии, потому что Google Drive Выбор в конечном счете, нужно больше, чем один «набор результатов "- не показано здесь - из более чем одного вызова функции файла. Наконец, линия в функции getOAuthToken() вызывает функцию createPicker(), расположенный в example.html:

function createPicker(fileParam) { 
    if (pickerApiLoaded && OAuthTokenVal) { 
     var picker = new google.picker.PickerBuilder() 
     .enableFeature(google.picker.Feature.NAV_HIDDEN) 
     .enableFeature(google.picker.Feature.MULTISELECT_ENABLED) 

    // Use DocsUploadView to upload documents to Google Drive . . . 

     .addView(new google.picker.DocsUploadView().setIncludeFolders(true)) 

    // In this example, the function sets these two values as global 
    // variables, but in the actual GAS application, the engineering works 
    // differently 

     .setOAuthToken(OAuthTokenVal) 
     .setDeveloperKey(DEVELOPER_KEY) 
     .setCallback(pickerCallback) 
     .setOrigin(google.script.host.origin) 

    // This does not work 
    // .setDocument(fileParam) 

     .build(); 
     picker.setVisible(true); 
    } else { 
     showError('Unable to load the file picker.'); 
    } 
} 

, и мы приходим к задаче. Функция createPicker() получает готовое, собранное содержимое файла, созданное более ранним вызовом функции funcSaveSheet(), в качестве параметра fileParam. Функция строит Google Picker, но, как это показано на снимке экрана

enter image description here

початкоотделяющем не знает, что он должен сохранить содержимое файла в/параметра fileParam. Сборщик ожидает, что пользователь перетащит или развернется в существующий файл. Вместо этого я хотел бы, чтобы эта функция создала Google Picker, который автоматически «знает», что он должен сохранить файл, переданный параметром fileParam/в параметр самой функции. Я хотел бы, чтобы Google Picker клонировал поведение диалогового окна сохранения нового файла Microsoft Word/Excel.

Я сильно искал - StackOverflow/Google Picker reference/и т. Д. - но не повезло. В ссылке Google Picker, я нашел то, что стало

.setDocument(fileParam) 

линии, здесь размещены в нижней части функции createPicker (fileParam).Я попробовал это, потому что это выглядело многообещающим, хотя ссылка Google Picker не говорит об этом, и Гуглинг вообще ничего мне не сказал. Эта линия полностью уничтожила сборщика. Если бы кто-нибудь мог направить меня на это, я был бы очень благодарен. Если бы я поступил за a bridge too far, я бы тоже хотел это знать.

Спасибо!

+0

Метод 'setDocument (document)' ожидает аргумент типа "document". Документация для типа документа гласит: «Документ - это перечисляемый тип, используемый для передачи информации о конкретном выбранном элементе». Файл, который вы передаете, не является выбранным элементом. Я сомневаюсь, что файл, который передается, относится к типу «Документ». [Документация - тип документа] (https://developers.google.com/picker/docs/reference#Document) Я просто догадываюсь, и я действительно ничего не знаю о сборщике, но я так думаю , –

+0

Спасибо, Сэнди. К сожалению, setDocument() точно не сделал то, что мне нужно, поэтому я все еще копаю. –

ответ

0

Я выяснил решение. Вместо Google Picker я использовал Google Cloud Print. Полное раскрытие:

1) Google Cloud Print находится в бета-версии, как сейчас

2) Он может видеть только корень Google Drive в качестве прямого сохранения файла целевого местоположения

После сохранения файла в Drive, однако пользователь может перемещать этот файл непосредственно на Диске.

Узнайте больше об этом на Bit Vectors. , ,