Открыть файл Google script

У меня уже некоторое время (год) работает скрипт Google Sheets, которому нужно прочитать файл HTML из каталога Google Диска. Код для открытия файла выглядит так:

var myHtmlFile = UrlFetchApp.fetch(«https://googledrive.com/host/0B1m. JtZzQ/myfile.htm»);

. и я мог бы использовать файл HTM для дальнейшего анализа.

Внезапно приведенный выше код выдает ошибку 404.

Изменилось ли что-нибудь в последнее время, что мешает мне открыть файл?

seanpj 11 Ноя 2014 в 02:14

2 ответа

Я нахожу странным, что это когда-либо работало раньше! Если это так, то, вероятно, это была ошибка — почти уверен, что она никогда не предназначалась для такой работы с «локальными» файлами. Я никогда не видел, чтобы где-либо упоминалось, что UrlFetchApp.fetch() может извлекать «локальные» файлы таким образом.

Простым решением было бы просто использовать правильный полный URL-адрес файла:

var myHtmlFile = UrlFetchApp.fetch(«https://googledrive.com/host//myfile.htm»);

Это гарантирует, что ваш код соответствует API и не сломается, когда Google что-то изменит в следующий раз.

Auto Fill Google Doc from Google Form Using Google Apps Script

azawaza 11 Ноя 2014 в 04:10

Интересно, ваш скрипт перестает работать из-за принудительного переноса старого листа (созданного до декабря 2013 года) на новые листы, который начался сегодня…

11 Ноя 2014 в 06:06

На самом деле, я облажался, когда писал вопрос, параметр URL-адреса в fetch был правильным URL-адресом, то есть: «googledrive.com/host/0B1m. dQ3U4eDFXNjJtZzQ/myfile.htm», где «0B1m. dQ3U4eDFXNjJtZzQ» в вашем ответе, поэтому звонок прошел нормально. Он просто перестал работать сегодня, но может быть с перебоями (как и многие другие вещи с Диском). Я перезапущу его позже и посмотрю.

11 Ноя 2014 в 06:13

Определенно это может быть просто временная проблема с Диском. Однако, если проблема не устранена в течение нескольких часов, это может быть что-то еще — попробуйте сохранить новую версию вашего скрипта и повторно развернуть ее как наше приложение (если это веб-приложение). Если это сценарий, связанный с листом, попробуйте создать новую электронную таблицу и скопировать в нее свой сценарий, чтобы проверить, будет ли он работать.

Что такое медиаплеер Google chromecast

11 Ноя 2014 в 06:21

Тайна раскрыта. Я получал из конструкции, которая включала что-то вроде «var thisFile = DocsList.getFileById(SpreadsheetApp.getActive().getId())». и. «thisFile.getParents()[0]. получить идентификатор()’. Мне кажется, что «DocsList» создает идентификаторы, но, вероятно, уже недействительные. Я помню, что где-то видел, что это устарело?

11 Ноя 2014 в 07:13

DocsList не устарел — по крайней мере, пока — но это «экспериментальная» служба, что означает, что она может быть прекращена в любое время (например, Google прекратил службу ScriptDb). По всей вероятности, в конечном итоге его заменит Drive Service. Однако вернемся к вашей проблеме: может быть, у вашего файла теперь несколько родителей (по какой-то причине) и thisFile.getParents[0] больше не указывает на общую папку, а на какую-то другую папку?

Google Apps Script — Google Drive Tutorial, Files, Folders, Copy Files, DriveApp, Iterator — Part 15

11 Ноя 2014 в 07:29

После обсуждения с «азаваза» (спасибо за все советы) я, наконец, решил эту проблему, поэтому я публикую решение на случай, если другие попадут в это.

Похоже на конструкцию

https://googledrive.com/host//myfile.htm

В UrlFetchApp.fetch(url, true) больше нельзя использовать. Выдает ошибку 404.

Я получил его из следующей конструкции (для простоты, предполагая, что у моей электронной таблицы есть только одна родительская папка):

. var myId = DocsList.getFileById(SpreadsheetApp.getActive().getId()); var folderId = myId.getParents()[0].getId(); var url = «https://googledrive.com/host/» + folderId + «/myfile.htm»; // url looks like: https://googledrive.com/host/0B1m. JtZzQ/myfile.htm» var httpResp = UrlFetchApp.fetch(url,true); //throws 404 . // now, parse ‘httpResp’

Решение, которое сработало для меня, состоит в том, чтобы найти файл напрямую, используя эту конструкцию (опять же, при условии, что существует только один файл с заданным именем):

var htmlCont = DocsList.find(«myfile.htm»)[0].getContentAsString(); // now, parse htmlCont

Я не знаю, почему «старое» решение больше не работает. Как я уже сказал, он работал в течение года.

ОБНОВЛЕНИЕ (май 2015 г.)
«Список документов» устарел, новая конструкция:

Как установить Google камеру на любой смартфон

var files = DriveApp.getFilesByName(myURL); if (files.hasNext())

Вместо этого следует использовать

Источник: question-it.com

Как открыть файлы Excel, которые находятся в папке на диске Google с помощью скрипта Google?

Мне нужно открыть файлы Excel в данной папке Google Drive и прочитать его данные. Для этого я использовал следующий код.

var folders = DriveApp.getFoldersByName(«Test Folder»); var foldersnext = folders.next(); var files = foldersnext.getFiles(); // get all files from folder while(files.hasNext()) < var sheets = SpreadsheetApp.openByUrl(files.next().getUrl()); // Line A >

Но это дает ошибку в «Линии А», как это;

Документ 1LDVkBTnkcY32ni9WoGDn6xHonPOX87ZV отсутствует (возможно, он был удален или у вас нет прав на чтение?)

Но когда войти идентификаторы файлов, используя,

var selectedFile = files.next(); Logger.log(selectedFile.getId());

Это дает мне ожидаемый результат. Итак, я думаю, что ошибка заключается в преобразовании файла в файл Excel. Пожалуйста, дайте мне решение, чтобы открыть несколько файлов Excel в данной папке и прочитать ее данные.

Этот проект имеет следующие области применения

  • https://www.googleapis.com/auth/drive.readonly
  • https://www.googleapis.com/auth/spreadsheets

user4156974 16 май ’19 в 04:23 2019-05-16 04:23
2019-05-16 04:23

1 ответ

  • Вы хотите получить значения из файла Excel на вашем Google Диске.
  • Файлы Excel помещаются в папку «Тестовая папка».

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как один из нескольких ответов.

Точка модификации:

  • Чтобы извлечь значения из файла Excel, сначала необходимо преобразовать файл Excel в электронную таблицу Google. После преобразования значения можно получить с помощью службы электронных таблиц.
  • Считается, что причина ошибки заключается в том, что файл Excel пытается открыть служба электронных таблиц.

Перед запуском скрипта:

При запуске сценария включите Drive API в Advanced Google Services следующим образом. Этот модифицированный скрипт использовал Drive API из расширенных сервисов Google.

  • В редакторе сценариев
  • Ресурсы -> Расширенные услуги Google
  • Включить Drive API v2

Модифицированный скрипт:

Пожалуйста, измените ваш скрипт следующим образом.

while(files.hasNext()) < var sheets = SpreadsheetApp.openByUrl(files.next().getUrl()); // Line A >
Для того, чтобы:
while(files.hasNext()) < var file = files.next(); if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) < var resource = < title: file.getName(), parents: [], mimeType: MimeType.GOOGLE_SHEETS >; var spreadsheet = Drive.Files.copy(resource, file.getId()); var sheets = SpreadsheetApp.openById(spreadsheet.id); > >

Google как изменить почту по умолчанию

Замечания:

  • Если файл Excel большой, может произойти ошибка.
  • Если количество файлов Excel велико, может произойти ошибка. В этом случае, пожалуйста, скажите мне.
  • В этом примере сценария преобразованная электронная таблица создается в той же папке файла Excel. Если вы хотите удалить файл после получения значений, используйте Drive.Files.remove(fileId) ,

Рекомендации:

  • Файлы: копия
  • Файлы: удалить
  • Служба электронных таблиц

Если я неправильно понял ваш вопрос, и это был не тот результат, которого вы хотите, я прошу прощения.

Редактировать:

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

  1. Создать новую папку.
  2. Поместите файл Excel в созданную папку.
    • Пожалуйста, скопируйте идентификатор папки. Этот идентификатор папки используется в скрипте.
    • Пожалуйста, подтвердите, включен ли Drive API в Advanced Google Services.
    • Запустите следующий пример сценария. Перед запуском установите идентификатор папки.

    function sample() < var folderId = «###»; // Please set the folder ID. var folder = DriveApp.getFolderById(folderId); var files = folder.getFiles(); while(files.hasNext()) < var file = files.next(); if (file.getMimeType() == MimeType.MICROSOFT_EXCEL || file.getMimeType() == MimeType.MICROSOFT_EXCEL_LEGACY) < var resource = < title: file.getName(), parents: [], mimeType: MimeType.GOOGLE_SHEETS >; var spreadsheet = Drive.Files.copy(resource, file.getId()); var sheet = SpreadsheetApp.openById(spreadsheet.id).getSheets()[0]; var value = sheet.getDataRange().getValues(); Logger.log(value) > > >

    • Если вы видите значения файла Excel в журнале, обнаруживается, что скрипт работает.

    Источник: stackru.com

    Блог

    Я написал автономный скрипт, развернутый как веб-приложение. Суть скрипта в том, что при нажатии на кнопку файл Google Sheet копируется в определенный каталог, затем я хочу, чтобы открылся новый файл. Мой код блокирует открытие нового файла. Части 1 и 2 в codeTest.gs работает отлично (примерно исходя из значения, связанного с нажатой кнопкой, скрипт будет искать в файле Google Sheet имя, которое нужно присвоить форме, а также местоположение, куда его нужно скопировать).

    Google play книги как удалить

    В моем коде вы заметите, что я говорю о форме, но на самом деле это файл Google Sheet (на практике файл Google Sheet — это заполняемый документ, похожий на форму).

    function doGet(e) < return HtmlService.createHtmlOutputFromFile(‘page’); > function fctOpenForm(idForm)< // fonction qui va faire une copie du formulaire pour ensuite l’ouvrir (on préserve ainsi l’original) // 1 — on va chercher en fonction de l’id du formulaire le répertoire où il doit être copié // 1.1 — on «ouvre» le fichier de configuration var ssConfigId=»1AegVIBq_pOLxhCGb7qcUr-wmCFIk7KRqQ5sB3HBDU04″; var ssConfig=SpreadsheetApp.

    openById(ssConfigId); var shtListeForms=ssConfig.getSheetByName(«Liste des formulaires»); // 1.2 — on identifie les lignes et colonnes importantes du tableau var derLig=ssConfig.getLastRow(); var derCol=ssConfig.

    getLastColumn(); var ligEntete=fctFindLigne(shtListeForms,»Nom du formulaire»,1,derLig,1); var colNomForm=fctFindColonne(shtListeForms,»Nom du formulaire»,1,derCol,ligEntete); var colIdForm=fctFindColonne(shtListeForms,»Id du formulaire»,1,derCol,ligEntete); var colIdRepDest=fctFindColonne(shtListeForms,»Id du répertoire de destination de la copie»,1,derCol,ligEntete); // 1.3 — on cherche l’id du répertoire de destination de la copie var idRepDest=shtListeForms.getRange(fctFindLigne(shtListeForms,idForm,ligEntete,derLig,colIdForm),colIdRepDest).

    getValue(); // 1.4 — on cherche le nom du formulaire var nomForm=shtListeForms.getRange(fctFindLigne(shtListeForms,idForm,ligEntete,derLig,colIdForm),colNomForm).getValue(); // 2 — on copie le formulaire var folderDest=DriveApp.getFolderById(idRepDest); var newForm=DriveApp.getFileById(idForm).makeCopy(«*» nomForm,folderDest); var newFormId=newForm.

    getId(); // 3 — on ouvre le nouveau fichier créé var url=newForm.getUrl; var htmlString = «window.open(‘» url «‘);»; return HtmlService.createHtmlOutput(htmlString); >

    DOCTYPE html> html> h1>Choix du formulaire h1> p>Cliquer sur le formulaire souhaité p> button value=»1uZwENM_Ilmo7hXLHNYaQP6GdJbuq8QlXkoiY0sIX8KQ» onclick=»fctGetValue(this)»>Prise de rendez-vous button> button value=»rembEnLigne» onclick=»fctGetValue(this)»>Remboursement — paiement initial en ligne button> button value=»rembComptoir» onclick=»fctGetValue(this)»>Remboursement — paiement initial au comptoir button> script> function fctGetValue(element)< var idForm=element.value; google.script.run.fctOpenForm(idForm); > script> html>

    Я не присоединяюсь к вызываемым функциям, потому что они работают нормально. Действительно, если я использую logger.log (URL) для проверки значения переменной, определенной в строке 34 codeTest.gs он содержит URL-адрес созданного нового файла.

    Интересно, почему последняя часть не работает:

    // 3 — on ouvre le nouveau fichier créé var url=newForm.getUrl; var htmlString = «window.open(‘» url «‘);»; return HtmlService.createHtmlOutput(htmlString);

    Этот фрагмент кода отлично работает, если я использую его самостоятельно в другом месте, но не здесь. Это потому, что в одном и том же скрипте вы не можете использовать HtmlService дважды?

    Google что такое суета

    Я ничего не смог найти об этом ограничении, но я не вижу никаких других причин.

    К сожалению, я не могу поделиться с вами документами, упомянутыми в моем коде, я работаю в компании с доменом, который нельзя использовать совместно с другими учетными записями, кроме нашего.

    Прошу прощения за мой английский…

    Ответ №1:

    Если вы просто хотите открыть указанный URL, вы можете использовать UrlFetchApp вместо этого вот так:

    UrlFetchApp.fetch(url);

    Ссылка

    Ответ №2:

    По предложению Диего я добрался до этого, и это работает :

    DOCTYPE html> html> body onload=’fctOpenFile()’> h1>Choix du formulaire h1> p>Cliquer sur le formulaire souhaité p> button value=»1uZwENM_Ilmo7hXLHNYaQP6GdJbuq8QlXkoiY0sIX8KQ» onclick=»fctGo(this)»>Prise de rendez-vous button> button value=»rembEnLigne» onclick=»fctGetValue(this)»>Remboursement — paiement initial en ligne button> button value=»rembComptoir» onclick=»fctGetValue(this)»>Remboursement — paiement initial au comptoir button> body> script> function fctGo(element)< var idForm=element.value; google.script.run.

    withSuccessHandler(fctOpenByUrl).fctOpenForm(idForm); > function fctOpenByUrl(url)< window.open(url); > script> html>
    function doGet(e) < return HtmlService.

    createHtmlOutputFromFile(‘page’); > function fctOpenForm(idForm)< // fonction qui va faire une copie du formulaire pour ensuite l’ouvrir (on préserve ainsi l’original) // 1 — on va chercher en fonction de l’id du formulaire le répertoire où il doit être copié // 1.1 — on «ouvre» le fichier de configuration var ssConfigId=»1AegVIBq_pOLxhCGb7qcUr-wmCFIk7KRqQ5sB3HBDU04″; var ssConfig=SpreadsheetApp.openById(ssConfigId); var shtListeForms=ssConfig.

    getSheetByName(«Liste des formulaires»); // 1.2 — on identifie les lignes et colonnes importantes du tableau var derLig=ssConfig.getLastRow(); var derCol=ssConfig.

    getLastColumn(); var ligEntete=fctFindLigne(shtListeForms,»Nom du formulaire»,1,derLig,1); var colNomForm=fctFindColonne(shtListeForms,»Nom du formulaire»,1,derCol,ligEntete); var colIdForm=fctFindColonne(shtListeForms,»Id du formulaire»,1,derCol,ligEntete); var colIdRepDest=fctFindColonne(shtListeForms,»Id du répertoire de destination de la copie»,1,derCol,ligEntete); // 1.3 — on cherche l’id du répertoire de destination de la copie var idRepDest=shtListeForms.getRange(fctFindLigne(shtListeForms,idForm,ligEntete,derLig,colIdForm),colIdRepDest).

    getValue(); // 1.4 — on cherche le nom du formulaire var nomForm=shtListeForms.getRange(fctFindLigne(shtListeForms,idForm,ligEntete,derLig,colIdForm),colNomForm).getValue(); // 2 — on copie le formulaire var folderDest=DriveApp.getFolderById(idRepDest); var newForm=DriveApp.getFileById(idForm).makeCopy(«*» nomForm,folderDest); var newFormId=newForm.getId(); return newForm.getUrl(); >

    Ale13, класс UrlFetchApp звучит интересно. Я тоже наведу справки.

    Источник: programbox.ru

    Рейтинг
    Загрузка ...