Я создал приложение Google Apps Script (GAS), привязанное к файлу Google Sheet (s). Приложение имеет этиGoogle Picker/PickerBuilder: я бы хотел, чтобы он работал, как диалог сохранения файлов Microsoft Word/Excel для сохранения нового файла.
Code.gs
Example.html
файлы. Эта диаграмма
показывает общий поток для сохранения файла особенность, которую я хочу построить. В файле 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, но, как это показано на снимке экрана
початкоотделяющем не знает, что он должен сохранить содержимое файла в/параметра 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, я бы тоже хотел это знать.
Спасибо!
Метод 'setDocument (document)' ожидает аргумент типа "document". Документация для типа документа гласит: «Документ - это перечисляемый тип, используемый для передачи информации о конкретном выбранном элементе». Файл, который вы передаете, не является выбранным элементом. Я сомневаюсь, что файл, который передается, относится к типу «Документ». [Документация - тип документа] (https://developers.google.com/picker/docs/reference#Document) Я просто догадываюсь, и я действительно ничего не знаю о сборщике, но я так думаю , –
Спасибо, Сэнди. К сожалению, setDocument() точно не сделал то, что мне нужно, поэтому я все еще копаю. –