【问题标题】:How to write to a "Google Spreadsheet" from Excel 2003 VBA如何从 Excel 2003 VBA 写入“Google 电子表格”
【发布时间】:2012-03-16 12:36:40
【问题描述】:

我有一个 Excel 2003 文件,其中包含与此类似的行:

我需要点击“按钮”,它会将该行添加为 Google 电子表格

上的最后一行

类似于:

有可能吗?

我应该使用命令行 Google 工具吗?

有没有更好的方法?更简单的方法?

你会怎么做?

(一旦我知道如何将“东西”从 VBA 添加到 Google Docs,我该如何将它添加到最后一行?)

更多信息:我有一个 Excel 2003“程序”可以保存公司的所有销售额(包括客户信息),并且我想做一个全球通讯录,我的(非它)同事可以轻松更新。

【问题讨论】:

  • 恕我直言,您似乎要求的是完整的代码解决方案。这不是 SO 的用途。你试过什么了?查看Google Docs API,如果您有具体问题,请回来询问。投票结束时“不是一个真正的问题”。
  • 不是我真正想要的(完整解决方案),只是已经“去过那里”、“做过”的人朝着正确的方向踢了一脚……就像:我会使用这个库,然后这样走.. 不:这是解决方案....抱歉,如果我的问题看起来是这样的话。

标签: vba google-docs excel-2003 google-sheets


【解决方案1】:

您不需要 OAuth 或电子表格 API。 Google 电子表格允许使用简单的表单输入数据,这也意味着 HTTP POST 可以解决问题。您只需要准备您的电子表格以通过如下表格接受数据输入:

  • 登录您的 Google 文档帐户
  • 创建电子表格或打开现有电子表格
  • 点击工具/创建表单
  • 在表单描述中添加任何内容以启用“保存”按钮
  • 保存表单
  • 复制表单创建页面底部链接中显示的formkey值
  • 现在您可以在不使用 OAuth 的情况下将简单的帖子发布到电子表格中

如果您的系统上有该条目,您现在可以使用curl 对其进行测试(将 formkey 占位符替换为您表中的 formkey):

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"

接下来,我们尝试通过以下代码从 Excel 工作表执行表单 POST。之前添加对“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

希望有帮助

【讨论】:

    【解决方案2】:

    我已经开始回答您的问题,但意识到这比我开始使用 OAuth 2.0 API 时所想的要简单得多。我认为如果您可以公开您的 Google 电子表格会容易得多,但我怀疑这对于销售数据是否可取。

    这很重要的原因是身份验证部分。下面的 ASP OAuth 可能可以用于一些工作,但我注意到它使用 Session 变量和其他一些 ASP 对象,所以你必须做很多调整。

    鉴于此,如果有帮助,这是我的原始答案。

    有一个谷歌电子表格 API: https://developers.google.com/google-apps/spreadsheets/#adding_a_list_row

    电子表格文档引用的 OAuth 2.0 链接已过期。您可以使用 OAuth 请求 here,这应该可以帮助您入门。

    API 函数由带有 XML 的 GET/POST 请求调用,您可以使用 XMLHTTP 对象调用。

    首先,在你的 Excel 项目中引用 Microsoft XML (Tools->References->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>"
    

    您应该能够为您的 VBA 代码调整 this OAuth 2.0 ASP library

    This is an ASP example 如何使用该 OAuth 库;再次,因为 ASP 和 VBA 都使用 VBScript 语法,它可能会被改编。

    【讨论】:

      【解决方案3】:

      过去几天我一直在尝试找到一个很好的简单解决方案来解决这个问题。

      似乎没有一个对我有用,所以我不得不利用我在网上找到的各种帖子中的点点滴滴。

      要遵循的步骤:

      • 创建 Google 电子表格
      • 创建一个包含三个字段的表单(在“工具”-“创建表单”下)(您可以稍后在测试后添加字段)

      返回到 Google 电子表格,它应该已经创建了一个新工作表(称为“表单响应”),其中的标题与设置表单时给出的字段名称相匹配。 A 列将自动将“时间戳”作为标题,并将您的字段名称作为 B、C 和 D 等列的标题。

      • 现在点击“表单”-“转到实时表单”
      • 写点击和“检查”(Ctrl-Shift-I)然后点击网络
      • 为各个字段输入一些数据(任何内容),然后单击“提交”
      • 点击“标题”点击“formResponse”。
      • 在“常规”下复制表单的 URL。注意一个“?”需要在 URL 的末尾。
        同样在标题下找到“表单数据”。这将在 MyURL 中使用 查找每个字段的 entry.123456789。 每个字段都需要这些数字。
      • 将代码中的 xxxxxxxx 替换为表单的相应编号。
      • 打开您的 Excel 电子表格并复制到如下所示的子例程中
      • 在 VBA 编辑器中点击 Tools – References 选择 Microsoft XML.v3.0, (Microsoft XML Core Services)

      代码:

      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 电子表格中

      【讨论】:

        【解决方案4】:
        • 与其在 Excel 中使用 VBA,不如使用带有 Excel Interop COM 包的成熟 VB.NET 应用程序。它的语法在很大程度上类似于 VBA 命令,但在 VB.NET 中转移到 Google 文档会容易得多。

        • 使用Google Documents List API 创建一个新的电子表格。

        • 使用Google Spreadsheets API 将数据移动到您的在线电子表格中。

        这两个 Google API 都是 REST API,因此您必须在 VB.NET 中使用 HttpRequest 对象。这是一个great example 如何使用它们,只需更改 URL 以使其适合 Google。 Google 电子表格甚至提供了一个 library 来抽象出其中的许多步骤。

        【讨论】:

          猜你喜欢
          • 2021-04-05
          • 1970-01-01
          • 2017-05-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-11
          相关资源
          最近更新 更多