我有一个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函数中获取?
由于
答案 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进行计算)。
这需要一点时间,因此您需要确保在脚本尝试使用该值之前对其进行操作。
另外,我怀疑如果你用很多数字尝试它会非常慢。
祝你好运!