从google docs电子表格获取单元格的价值到javascript

时间:2013-02-14 22:27:24

标签: javascript google-sheets google-docs

我有一个javascript函数

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

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

我使用Google文档中的“获取已发布数据的链接”功能来获取指向单元格B2的链接。链接看起来像这样。

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

是否有将链接的值从我的javascript函数中获取?

由于

3 个答案:

答案 0 :(得分:4)

首先,我建议的是"获取已发布数据的链接"作为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>

答案 1 :(得分:1)

Same origin policy可能会遇到麻烦。通常,Web浏览器不允许将AJAX请求作为安全措施来访问其他域。我有点担心ultraklon的解决方案在firefox中工作,所以在新的浏览器中可能会有所改变。它似乎在IE8中不起作用,因此如果您需要支持该浏览器,请继续阅读。

通常,JSONP用作围绕同一原始政策的方式,但在您的情况下这不是一个选项,因为Google文档不提供此格式的数据。

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

一旦你有代理请求,你可以用一些ajax将它放入你的javascript代码中,就像在ultraklon的回答中一样:

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

答案 2 :(得分:1)

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

步骤如下:

首先,您需要在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>

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

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

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

另外,我怀疑如果你用很多数字尝试它会非常慢。

祝你好运!