Как написать в «Google Spreadsheet» из Excel 2003 VBA - PullRequest
4 голосов
/ 16 марта 2012

У меня есть Excel 2003 файл со строкой, подобной этой:

enter image description here

Мне нужно нажать "на кнопку" , и эта строка будет добавлена ​​как последняя в Таблице Google

Аналогично:

enter image description here

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

Должен ли я использовать инструменты Google командной строки?

Есть ли лучший способ? Проще?

Как бы вы это сделали?

(когда я знаю, как добавить «материал» из VBA в Google Docs , как мне добавить его в последнюю строку?)

Дополнительная информация: У меня есть Excel 2003 «программа», которая сохраняет все продажи компании (с информацией о клиенте), и я бы как сделать глобальную адресную книгу, которая легко обновляется моими (не it) коллегами.

Ответы [ 4 ]

7 голосов
/ 26 марта 2012

Вам не нужен OAuth или API электронных таблиц. Google Spreadsheet позволяет вводить данные в простой форме, что также означает, что HTTP POST справится с задачей. Вам просто нужно подготовить электронную таблицу для приема записей данных с помощью следующей формы:

  • Войдите в свою учетную запись Google Docs
  • Создать электронную таблицу или открыть существующую
  • Нажмите Инструменты / Создать форму
  • Добавьте что-нибудь в описание формы только для того, чтобы включить кнопку Сохранить
  • Сохранить форму
  • Скопировать значение ключа формы, отображаемое в ссылке внизу страницы создания формы
  • Теперь вы можете опубликовать простую публикацию в таблице без OAuth

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

curl.exe -v -k "http://spreadsheets.google.com/formResponse?formkey=<formkey>" -d "entry.0.single=test&entry.1.single=test2&pageNumber=0&backupCache=&submit=Submit"

Далее мы пытаемся выполнить форму POST из нашего листа Excel с помощью следующего кода. Добавьте ссылку на «Microsoft XML, v3.0» ранее. Замените column1 желаемыми значениями.

Dim httpRequest as XMLHTTP
Set httpRequest = New XMLHTTP
httpRequest.Open "POST", "http://spreadsheets.google.com/formResponse?formkey=<formkey>&amp;ifq", False
httpRequest.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
httpRequest.Send "entry.0.single=" + column1 + "&entry.1.single=" + column2 + "&pageNumber=0&backupCache&submit=Submit"

'Check result in the following vars
httpRequest.status
httpRequest.statusText

Надеюсь, это поможет

4 голосов
/ 16 марта 2012

Я начал отвечать на ваш вопрос, но понял, что это гораздо менее тривиально, чем я думал, когда начал играть с OAuth 2.0 API .Я думаю, было бы намного проще, если бы вы могли сделать свою электронную таблицу Google общедоступной, но я сомневаюсь, что это целесообразно с данными о продажах.

Причина, по которой это нетривиально, заключается в аутентификации.Приведенный ниже ASP OAuth, вероятно, пригоден для некоторой работы, но я заметил, что он использует переменные Session и некоторые другие объекты ASP, поэтому вам придется много настраивать.

В этом свете, вот мой оригинальныйответьте, если это поможет.

Существует API таблиц Google: https://developers.google.com/google-apps/spreadsheets/#adding_a_list_row

Ссылка OAuth 2.0, на которую ссылаются документы таблиц, устарела.Вы можете поиграть с запросами OAuth здесь , что должно помочь вам начать работу.

Функции API вызываются запросами GET / POST с XML, которые вы можете вызывать с помощью объекта XMLHTTP.

Во-первых, обратитесь к Microsoft XML в вашем проекте Excel (Инструменты-> Ссылки-> Microsoft XML, v6.0)

В VBA вы по существу используете следующее для отправки запросов XML:

Dim x as MSXML2.XMLHTTP
Set x = New MSXML2.XMLHTTP
x.Open "POST", "http://example.com/", False
x.Send "<xmldata></xmldata>"

Вы должны иметь возможность адаптировать эту библиотеку OAuth 2.0 ASP для своего кода VBA.

Это пример ASP о том, как использоватьэта библиотека OAuth;опять же, поскольку и ASP, и VBA используют синтаксис VBScript, его, вероятно, можно адаптировать.

0 голосов
/ 24 ноября 2018

Я провел последние пару дней, пытаясь найти хорошее простое решение этой проблемы.

Мне показалось, что ни один из них не сработал, поэтому мне пришлось использовать фрагменты различных постов, которые я нашел в Интернете.

Последующие действия:

  • Создание электронной таблицы Google
  • Создание формы (в разделе «Инструменты» - «Создание формы») с тремя полями (вы можете добавить поля позже после тестирования)

Вернитесь к электронной таблице Google, и она должна была создать новый лист (называемый «Ответы формы») с заголовками, совпадающими с именами полей, указанными при настройке формы.Столбец A автоматически будет иметь заголовок «Отметка времени» с именами полей в качестве заголовков для столбцов B, C & D и т. Д.

  • Теперь нажмите «Форма» - «Перейти к активной форме»
  • Нажмите «запись» и «Inspect» (Ctrl-Shift-I) и нажмите «Network»
  • Введите некоторые данные (что угодно) для каждого из соответствующих полей и нажмите «Submit»
  • Нажмите «Заголовки». Нажмите «FormResponse».
  • В разделе «Общие» скопируйте URL-адрес формы.Обратите внимание, что «?» Требуется в конце URL.
    Также под заголовками найдите «Данные формы».Это будет использоваться в MyURL. Ищите запись. 123456789 для каждого из полей.Эти числа вам понадобятся для каждого поля.
  • Замените xxxxxxxx в своем коде соответствующими номерами формы.
  • Откройте электронную таблицу Excel и скопируйте подпрограмму, показанную ниже
  • В редакторе VBA нажмите Инструменты - Ссылки , выберите Microsoft XML.v3.0, (Основные службы Microsoft XML)

Код:

Sub Write_Info_To_Google()
    Dim ScriptEngine
    Dim http As Object
    Dim myURL As String
    Set http = CreateObject("MSXML2.ServerXMLHTTP")
    Set ScriptEngine = CreateObject("MSScriptControl.ScriptControl")
    ScriptEngine.Language = "JScript"
    ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"

    myURL = "https://docs.google.com/forms/d/e/ . . . . /formResponse?" & _
            "entry.xxxxxxxxx=" + Cells(2, 1).Text + _
            "&entry.yyyyyyyyy=" + Cells(2, 2).Text + _
            "&entry.zzzzzzzzz=" + Cells(2, 3).Text
    http.Open "GET", myURL, False
    http.setRequestHeader "User-Agent", "Google Chrome 70.03538.102 (compatible; MSIE _ 
    6.0; Windows NT 5.0)"
    http.send
End Sub

Запустите этот макрос и посмотрите, как ваши данные из строки 2 появятся в электронной таблице Google

0 голосов
/ 26 марта 2012
  • Вместо использования VBA в Excel используйте полноценное приложение VB.NET с пакетом Excel Interop COM.Его синтаксис во многом аналогичен командам VBA, но в VB.NET перенос в документы Google будет намного проще.

  • Использование API Списка документов Google для создания новой электронной таблицы.

  • Используйте API электронных таблиц Google для перемещения данных в электронную таблицу.

Оба API Google являются API REST, поэтому вам придется использовать объекты HttpRequest в VB.NET.Вот отличный пример того, как их использовать, просто измените URL, чтобы они подходили для Google.Google Spreadsheets даже предлагает библиотеку , которая абстрагирует многие из этих шагов.

...