Загрузка google таблицы

29.05.23

Интеграция - WEB-интеграция

Загрузим google таблицу через GET запрос.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Загрузка google таблицы:
.epf 8,06Kb ver:1
16
16 Скачать (1 SM) Купить за 1 850 руб.

Была поставлена задача загружать в 1С google таблицу и постоянно обновлять ее в 1с (каждые 5 минут).

Таблица примерно такого вида:

 

 

 

 

В ссылке на google таблицу нас интересуют две части.

1 часть - это id самой таблицы

2 часть - это gid листа (если лист номер1, тогда gid=0)

 

 

Делаем запрос из 1С к этому адресу, в конце добавляем /export?format=csv

 

 

АдресРесурса = "docs.google.com";        
АдресНужнойСтраницы = "/spreadsheets/d/"+ТаблицаГугл+ "/export?format=csv&gid=" + ЛистГугл;

Соединение = Новый HTTPСоединение(АдресРесурса,,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(АдресНужнойСтраницы);
Ответ = Соединение.Получить(Запрос);

Этот запрос вернет Ответ.КодСостояния = 307 (HTTP код перенаправления 307 Temporary Redirect означает, что запрошенный ресурс был временно перемещён в URL-адрес, указанный в заголовке Location)

Делаем следующий запрос по адресу из заголовка

 

 

Location = Ответ.Заголовки.Получить("Location");  
Location = СтрЗаменить(Location,"https://","");  
НомЕкс = СтрНайти(Location,"/export/");
АдресРесурса = Лев(Location,НомЕкс-1);  
АдресНужнойСтраницы = Сред(Location,НомЕкс);  

Соединение = Новый HTTPСоединение(АдресРесурса,,,,,,Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос(АдресНужнойСтраницы);	
Ответ = Соединение.Получить(Запрос);
ВходящаяСтрока = Ответ.ПолучитьТелоКакСтроку();

 

Получаем строку в формате csv с разделителем "," Поменять разделитель на ";" не получится. Потому могут возникнуть трудности при разборе строки csv, если в google таблице были использованы запятые.

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

 

 

 

 

Тестировал: 

  • 1С:Комплексная автоматизация 2 (2.4.13.209)
  • Платформа 1С:Предприятие 8.3 (8.3.19.1467)

google таблцы

См. также

WEB-интеграция Анализ продаж Системный администратор Программист Пользователь Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Модуль "Подсистема интеграции AmoCRM с 1С" позволяет обеспечить единое информационное пространство, в котором пользователи могут эффективно управлять клиентской базой, следить за статусами сделок и поддерживать актуальность данных как в AmoCRM, так и в 1С. Бесплатный период Техподдержки - 1 месяц.

60000 руб.

07.05.2019    34439    65    45    

26

WEB-интеграция Администрирование веб-серверов Платные (руб)

Веб-портал обеспечивает удобный доступ к конфигурации 1С:ITIL, 1С:ITILIUM, Управление IT-отделом 8 через интернет с любого устройства посредством браузера, увеличивая эффективность работы пользователей и снижая нагрузку на сервер. Быстрая инсталляция портала за пару часов, удобный и интуитивно понятный интерфейс и безопасность данных помогут упростить работу с порталом и ускорить выполнение бизнес-процессов компании.

128000 руб.

19.12.2023    2429    2    0    

9

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Онлайн-заказ - это решение для автоматизации процесса оформления заказов на сайте в торговых организациях. Продукт обеспечивает легкое взаимодействие между компанией и клиентами через веб-интерфейс, интегрированный с 1С:Предприятие. Система позволяет снизить операционные расходы, повысить лояльность клиентов и оптимизировать работу отдела продаж.

57600 руб.

26.11.2024    2155    1    1    

4

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18961    21    22    

18

WEB-интеграция Программист Руководитель проекта Платформа 1С v8.3 1C:Бухгалтерия 1С:Франчайзи, автоматизация бизнеса Платные (руб)

Расширение значительно упрощает написание API на 1С. Веб программисты получают простой и понятный доступ к 1С. Описание API создаётся автоматически и представляется в виде удобном как для человека, так и для программной обработки.

24000 руб.

27.09.2024    3793    3    2    

4

WEB-интеграция Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бытовые услуги, сервис Платные (руб)

Внешняя обработка разрабатывалась для загрузки документов из Ветменеджер в 1С: Бухгалтерия 3.0

12000 руб.

02.02.2021    18724    53    50    

29

WEB-интеграция Программист Бизнес-аналитик Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Оптовая торговля, дистрибуция, логистика ИТ-компания Платные (руб)

Модуль "Экспортер" — это расширение для 1С, предназначенное для автоматизации процессов выгрузки данных. Оно позволяет эффективно извлекать, преобразовывать и передавать данные из систем 1С в интеграционную платформу Spot2D. Подсистема упрощает настройку, снижает количество ручных операций и обеспечивает удобный контроль данных.

14400 руб.

20.12.2024    744    3    1    

5

Обмен с ГосИС WEB-интеграция Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:Документооборот 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Платные (руб)

Обработка является альтернативой механизму, разработанному фирмой 1С и заполняющему реквизиты контрагента по ИНН или наименованию. Не требуется действующей подписки ИТС. Вызывается как внешняя дополнительная обработка, т.е. используется, непосредственно, из карточки контрагента. Заполнение по ИНН или наименованию реквизитов контрагента по данным сайта ФНС (egrul.nalog.ru) для БП 2.0, БП 3.0, БГУ 1.0, БГУ 2.0, УТ 10.3, УТ 11.x, КА 1.1, КА 2.x, УПП 1.x, ERP 2.x, УНФ 1.5, УНФ 1.6, УНФ 3.0, ДО 2.1

2400 руб.

28.04.2016    92746    187    217    

340
Отзывы
24. xlmel 19.05.23 08:09 Сейчас в теме
(23)
// GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A1:D5 - это из справки по данному методу.
У меня не получилось подключиться через HTTPСоединение. Пришлось делать через WinHttp.WinHttpRequest.5.1. Я понимаю, что плохо, но работает устойчиво и слава Богу. В итоге функция чтения таблицы приобрела такой вид:

Адрес = "https://sheets.googleapis.com/v4/spreadsheets/" + spreadsheetId + "/values/" + range + "?key=" + API_key;
ХТТПЗапрос = ОбщегоНазначенияHTTP.ПолучитьHTTPЗапрос("GET", Адрес, access_token);
ХТТПЗапрос.Send();
Ответ = ОбщегоНазначенияHTTP.ОбъектJSON(ХТТПЗапрос.ResponseText());
ХТТПЗапрос = Неопределено;
Возврат Ответ;

В сам адрес запроса мне пришлось добавить + "?key=" + API_key. Без этого не взлетало. Прочитал где-то на stackoverflow

Функция ПолучитьHTTPЗапрос(Метод, Адрес, access_token) имеет такой вид:
ХТТПЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddObject("ХТТПЗапрос", ХТТПЗапрос);
Скрипт.Eval("ХТТПЗапрос.Option(4)=13056");
ХТТПЗапрос.Open(Метод, Адрес);
ХТТПЗапрос.setRequestHeader("Content-Type", "application/json");
ХТТПЗапрос.setRequestHeader("Accept", "application/json");
ХТТПЗапрос.setRequestHeader("Authorization", "Bearer " + access_token);
Возврат ХТТПЗапрос;

Функция ОбъектJSON(СтрокаJSON) - фактически обертка вокруг этих строк
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
ОбъектJSON = ПрочитатьJSON(Чтение);

API_key - необходимо получить при регистрации приложения на Google
access_token - перед каждым обращением необходимо обменять refresh_token на access_token. refresh_token так же получается при регистрации приложения.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. PLAstic 296 17.05.23 13:03 Сейчас в теме
Эх, ужас-то какой. Прям расстроил ты меня, Евгений... :(
Ну разве нет апишки для доксов? Для "диска", на худой конец? Ну ведь можно же читать любые файлы через апишку красиво.
Axil; prestige; kser87; +3 Ответить
3. siamagic 17.05.23 15:20 Сейчас в теме
(1)Зачем эта заморочка? Копируешь урл - получаешь результат. Работы на час с чаем.
simuljakr; +1 Ответить
5. PLAstic 296 17.05.23 16:45 Сейчас в теме
(3) А ещё проще - показывать табличный документ в 1С и просто копипастить в него данные из таблицы. Кажется, даже загрузка данных из табличных документов с диска ИТС взлетит с этим.
7. John_d 5978 17.05.23 16:56 Сейчас в теме
(5) так не пойдет, загружать нужно каждые 5 минут
9. PLAstic 296 17.05.23 17:14 Сейчас в теме
(7) Тогда намного выгоднее использовать г.диск. У меня подобное было для Я.диска реализовано, там потрясающая работа с файлами.
А это решение, как ни крути, фронтэндерский колхоз.
2. xlmel 17.05.23 15:18 Сейчас в теме
GET запрос к https://sheets.googleapis.com/v4/spreadsheets/ + spreadsheetId + /values/ + range, где spreadsheetId - id таблицы, а range имеет вид Sheet1!A1:D5, позволяет получить данные из указанного участка таблицы в json-формате и нет проблем с десятичными разделителями.
simuljakr; prestige; budidich; starik-2005; mrChOP93; Lemmonbri; akR00b; uk09; ixijixi; Aleksey.Bochkov; +10 Ответить
18. mikl79 120 18.05.23 15:30 Сейчас в теме
(2)
GET запрос к https://sheets.googleapis.com/v4/spreadsheets/ + spreadsheetId + /values/ + range, где spreadsheetId - id таблицы, а range имеет вид Sheet1!A1:D5, позволяет получить данные из указанного участка таблицы в json-формате и нет проблем с десятичными разделителями.

а можно пример запроса?
spreadsheetId - вот это больше всего интересует
19. xlmel 18.05.23 16:59 Сейчас в теме
(18) В примере топик-стартера это Таблица гугл.
23. mikl79 120 19.05.23 07:24 Сейчас в теме
(19), у меня не получилось, Ответ.КодСостояния = 403
24. xlmel 19.05.23 08:09 Сейчас в теме
(23)
// GET https://sheets.googleapis.com/v4/spreadsheets/spreadsheetId/values/Sheet1!A1:D5 - это из справки по данному методу.
У меня не получилось подключиться через HTTPСоединение. Пришлось делать через WinHttp.WinHttpRequest.5.1. Я понимаю, что плохо, но работает устойчиво и слава Богу. В итоге функция чтения таблицы приобрела такой вид:

Адрес = "https://sheets.googleapis.com/v4/spreadsheets/" + spreadsheetId + "/values/" + range + "?key=" + API_key;
ХТТПЗапрос = ОбщегоНазначенияHTTP.ПолучитьHTTPЗапрос("GET", Адрес, access_token);
ХТТПЗапрос.Send();
Ответ = ОбщегоНазначенияHTTP.ОбъектJSON(ХТТПЗапрос.ResponseText());
ХТТПЗапрос = Неопределено;
Возврат Ответ;

В сам адрес запроса мне пришлось добавить + "?key=" + API_key. Без этого не взлетало. Прочитал где-то на stackoverflow

Функция ПолучитьHTTPЗапрос(Метод, Адрес, access_token) имеет такой вид:
ХТТПЗапрос = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
Скрипт = Новый COMОбъект("MSScriptControl.ScriptControl");
Скрипт.language = "javascript";
Скрипт.AddObject("ХТТПЗапрос", ХТТПЗапрос);
Скрипт.Eval("ХТТПЗапрос.Option(4)=13056");
ХТТПЗапрос.Open(Метод, Адрес);
ХТТПЗапрос.setRequestHeader("Content-Type", "application/json");
ХТТПЗапрос.setRequestHeader("Accept", "application/json");
ХТТПЗапрос.setRequestHeader("Authorization", "Bearer " + access_token);
Возврат ХТТПЗапрос;

Функция ОбъектJSON(СтрокаJSON) - фактически обертка вокруг этих строк
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
ОбъектJSON = ПрочитатьJSON(Чтение);

API_key - необходимо получить при регистрации приложения на Google
access_token - перед каждым обращением необходимо обменять refresh_token на access_token. refresh_token так же получается при регистрации приложения.
4. kser87 2469 17.05.23 16:30 Сейчас в теме
Интересно, банит ли гугл за большое количество подобных запросов?
За обращение к геокодеру банит, например.
6. John_d 5978 17.05.23 16:51 Сейчас в теме
(4) может если слишком много, обращаюсь каждые 5 минут (не банит)
user965942; +1 Ответить
29. user1740389 23.05.23 11:37 Сейчас в теме
(4)
Немного не в тему, но у меня есть arduinки, которые мониторят показатели микроклимата в различных помещениях. Информация залетает в гугл таблицу на разные листы.
Каждое устройство посылает сигнал примерно раз в минуту (ардуино и точное время - тема для отдельного разговора).
Бана нет. Пока работает 3 устройства
simuljakr; kser87; +2 Ответить
8. Antoska 16 17.05.23 17:12 Сейчас в теме
Любопытно. А таблица доступна по ссылке или есть авторизация?
10. SpaceOfMyHead 198 17.05.23 20:57 Сейчас в теме
Сообщило "не получен. Статус-код 302"

Редиректит на аутентификацию
11. laperuz 47 18.05.23 09:39 Сейчас в теме
А не проще было поле HTML документа на форму вынести и подключить обработчик ожидания, который бы каждые 5 минут вызывал обновление?
14. Antoska 16 18.05.23 09:48 Сейчас в теме
(11) Смотря что нужно с данными сделать. Если просто показать, то можно было бы поле использовать. А вот если куда записать надо или обработать данные, то тут уже лучше в CSV.
12. SpaceOfMyHead 198 18.05.23 09:46 Сейчас в теме
У меня обработка не заработала. Гугл возвращает 302. Обрабатываешь 302 - отдаёт HTML аутентификации
13. SpaceOfMyHead 198 18.05.23 09:47 Сейчас в теме
(12) Получилось. Надо предоставить доступ к документу всем, у кого есть ссылка

Не нашёл этого нюанса в статье. Хорошо бы это упомянуть
15. Antoska 16 18.05.23 09:49 Сейчас в теме
(13) Вот и ответ на мой вопрос. Нужен доступ по ссылке.
16. John_d 5978 18.05.23 11:22 Сейчас в теме
17. mikl79 120 18.05.23 14:56 Сейчас в теме
Спасибо, интересно, попробовал - тоже получилось.
20. xlmel 18.05.23 18:05 Сейчас в теме
Касательно бана за запросы, когда писал для себя библиотеку работы с Google Sheets, то упирался в 100 запросов за 5 минут. Если нужно больше, то надо как-то настраивать в аккаунте. Если честно, я не разобрался. Для чтения этого с головой хватает. Труднее, если нужно формировать таблицу с нуля со всем форматированием. Ввиду того, что пакеты были очень большими и довольно трудно было все это поддерживать, то каждую операцию форматирования делал отдельным запросом. В итоге обычно 2 запроса на создание таблицы и предоставление прав и в зависимости от сложности несколько запросов на форматирование каждого листа. Я делал отдельно ширину колонок, высоту строк, заливку + шрифт + числовой формат + перенос, объединение ячеек, границы ячеек и условное оформление. Мне так было проще, но это все можно собрать в один запрос. Если лист в таблице 1, то уже 3 запроса. 4-й запрос - загрузка данных на лист. Каждый следующий лист - еще обычно 2 запроса, хотя можно объединить форматирование всех листов в один запрос. Таким образом ограничение не является критичным.
Есть еще один способ, я в последнее время для вывода в шаблоны и загрузки использую его. Я на Google Apps Script написал небольшое и достаточно простое приложение с функциями doGet() и doPost(). Первая возвращает данные из таблицы, id которой передан как параметр, а вторая создает или изменяет таблицу по данным из параметров запроса. В таком виде кроме данных можно получить массу дополнительной информации, например дату и время последнего изменения. И что было для меня более важно, в рамках одного скрипта можно работать со всем их зоопарком: GMail, Disk, Sheets, Docs, Calendar, Translator, Forms. И вроде как один вызов скрипта - один запрос к Google. Опубликовал скрипт как веб-приложение, получил его адрес и теперь в регламентах опрашиваю нужные документы и собираю информацию или выгружаю информацию. Поэтому, я бы советовал интеграцию с Google делать через Apps Script.
31. kser87 2469 26.05.23 11:09 Сейчас в теме
(20) надо у гугла покупать платный доступ. Они выдают ключ и его в теле каждого запроса надо указывать. Стоит прямо скажем недешево
21. starik-2005 3160 18.05.23 19:08 Сейчас в теме
У меня один знакомый бесполезник халтурил деланием сайтов, так всю СУБД хранил в таком вот гугелшите. Надо ему другой сайт - просто гуглошит копировал и менял там все на то, что надо. Отличный инструмент! Админки (особенно битрикса) нервно курят в углах и льют крокодильные слезки...
22. starik-2005 3160 18.05.23 19:12 Сейчас в теме
Статье + стоит поставить только лишь за то, что она единственная в списке рекомендуемых настоящая статья, а не реклама непойми чего )))
ЗЫ :Зря ты, автор, файл к статье прифигачил. Получишь за 50 звезд не 20 $M, а 0.
26. John_d 5978 19.05.23 10:57 Сейчас в теме
(22) я не ожидал, что она так быстро наберет 50 звезд) Бывает статья набирает 20-30 звезд и так остается висеть. Спасибо всем, кто поддержал.
maksa2005; +1 Ответить
27. Antoska 16 19.05.23 15:35 Сейчас в теме
(26)Хорошая статья. Почему бы и не сохранить в избранном?
32. kser87 2469 26.05.23 11:12 Сейчас в теме
(26) удалите файл. вам начислят СМ. Проверено
unknown181538; +1 Ответить
25. xlmel 19.05.23 08:25 Сейчас в теме
Я вроде про создание приложений для обработки таблиц Google Sheets писал.
28. SpaceOfMyHead 198 22.05.23 08:53 Сейчас в теме
Кстати. С помощью HTTP-клиента можно так:

Адрес = "https://docs.google.com/spreadsheets/d/2Gq80KtQgMdAd-ma_3OsUASS6ItDsRsT8DpY4BXcKKcs/export?format=csv&gid=0";
ДП = КлиентHTTPКлиентСервер.НовыеДополнительныеПараметры();

Ответ = КлиентHTTPКлиентСервер
	.ИспользоватьСессию(ДП)
	.ТелоОтветаКакТекст(ДП)
	.Получить(Адрес, , ДП);

ВашЦСВ = Ответ.Тело;
Показать
30. пользователь 25.05.23 02:17
Сообщение было скрыто модератором.
...
33. SnakePlisskin 3 12.11.24 11:24 Сейчас в теме
Доброго дня!
1. А можно узнать как-то сколько страниц содержит гугл документ ?
2. И как узнать идентификаторы всех этих страниц ?
34. simuljakr 204 25.01.25 15:03 Сейчас в теме
Не скачивал, но однозначно +
Задача частая и востребованная.
Оставьте свое сообщение