【问题标题】:Getting value of a cell from google docs spreadsheet into javascript从 google docs 电子表格中获取单元格的值到 javascript
【发布时间】:2013-02-14 22:27:23
【问题描述】:

我有一个javascript函数

function calculate() {
  var interestRate=4.5;
  ...
}

我希望interestRate 来自谷歌文档电子表格中的一个单元格。 我创建了一个谷歌文档电子表格,并将利率存储在单元格 B2 中

我使用 Google 文档中的“获取已发布数据的链接”功能来获取到单元格 B2 的链接。链接如下所示。

https://docs.google.com/spreadsheet/pub?key=....c&single=true&gid=0&range=b2&output=html

有没有办法从链接中获取值到我的 javascript 函数中?

谢谢

【问题讨论】:

    标签: javascript google-sheets google-docs


    【解决方案1】:

    首先,我建议将“获取已发布数据的链接”作为 csv,因为它只有 1 个字段,因此您不必解析它。 如果创建了这个spreadsheet,并创建了一个link with "Get a link to Published Data",那么在这种情况下,第二个链接将获得一个只有一个字段的csv。 您将能够使用以下 js 代码来获得它(注意我使用的是 jQuery)

    $.ajax("https://docs.google.com/spreadsheet/pub?key=0Auwt3KepmdoudE1iZFVFYmlQclcxbW85YzNZSTYyUHc&single=true&gid=0&range=b5&output=csv").done(function(result){
        alert(result);
    });
    

    问候

    编辑:完整代码

    <!doctype>
    <html>
        <head>
            <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js">    </script>
        </head>
        <body>
            <script>
                $.ajax("https://docs.google.com/spreadsheet/pub?key=0Auwt3KepmdoudE1iZFVFYmlQclcxbW85YzNZSTYyUHc&single=true&gid=0&range=b5&output=csv").done(function(result){
                    alert(result);
                });
            </script>
        </body>
    </html>
    

    【讨论】:

    • 你测试过这个吗?我怀疑由于跨域问题它不会工作。
    • 为我工作 Oliver,我有代码,我会编辑答案,如果你想尝试,可以复制粘贴
    • 奇怪,你说得对:它在 Firefox 中运行良好。我不确定它是否由于跨域问题而在 IE8 中失败,或者这只是 IE 不好 - 我不明白为什么 XSS 有时有效,有时无效。
    • 不会发生跨域问题,因为 Google 文档服务器会在此处发送更多 CORS 标头:- developer.mozilla.org/en/docs/HTTP/Access_control_CORS
    • 但是……它们确实发生了!在 Safari 中进行测试并获取:Access-Control-Allow-Origin 不允许 origin (my domain)。
    【解决方案2】:

    Same origin policy 可能会给您带来麻烦。通常,作为安全措施,Web 浏览器不允许对不同域的 AJAX 请求。我有点惊讶ultraklon 的解决方案在firefox 中工作,所以也许这在较新的浏览器中发生了变化。不过,它似乎在 IE8 中不起作用,所以如果您需要支持该浏览器,请继续阅读。

    通常,JSONP 被用作绕过同源策略的一种方式,但在您的情况下这不是一个选项,因为 google docs 不提供这种格式的数据。

    也许最好的解决方案是通过您自己的服务器将请求代理到谷歌文档,正如this question 中所建议的那样。在您的 Web 服务器上创建一个将单元格(或单元格范围)作为参数的方法。让服务器方法从谷歌文档请求单元格数据,然后让它以 JSON 格式将此数据返回给调用者。

    一旦您代理了请求,您就可以使用一些 ajax 将其放入您的 javascript 代码中,就像在 ultraklon 的回答中一样:

    $.get('/google-docs-proxy?cell=B1', function(data) {
        alert('data');
    });
    

    【讨论】:

      【解决方案3】:

      这是可能的,但它有点邋遢,尽管有跨站问题。

      步骤如下:

      首先,您需要在 google 电子表格中创建一个读取您要使用的值的单元格,例如,如果您想要的值位于电子表格的单元格 A1 中,您可以将其作为公式放入单元格 B1 中,如下所示:

      ="interestrate="&text(A1,"0.0")&";"
      

      这样做是创建一个包含文本的单元格(为了说明,我假设包含 5.7 作为数字):

      interestrate="5.7";
      

      这是 javascript 中的有效语句。

      然后将以下内容放入 html 页面的头部(或任何地方):

      <script src="https://docs.google.com/spreadsheet/pub?key=0AgLSs-sWp9JUdDgxV3VXbUZhZ3BXUGQ3MEtyVWhYRnc&single=true&gid=0&output=txt&range=b1"></script>
      

      (显然,为包含该新功能的电子表格设置键值)。

      现在,当页面加载时,用户的浏览器将从 google 电子表格中获取单行 javascript 并执行它。因此,变量,在本例中为“interestrate”,设置为原始单元格中的值(作为字符串,因此您需要 parseFloat 来进行计算)。

      这需要一点时间,因此您需要确保在您的脚本尝试使用该值之前对其进行操作。

      另外,我怀疑如果您尝试使用大量数字,这会变得非常慢。

      祝你好运!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-29
        • 1970-01-01
        相关资源
        最近更新 更多