我过去使用过tabletop.js[1],非常棒!你可以认真地做任何你想做的事。
我看到的唯一问题是,你需要将电子表格发布到网上,当然,如果你使用敏感数据,这真的很有风险。
我现在需要在一个有敏感数据的项目中使用它,所以我希望有人能指导我如何在没有发布到网上的电子表格中使用它。
我已经搜索了很长一段时间,但没有任何成功,但似乎tabletop.js确实支持私有表(这是添加此选项的pull请求[2])。
事实上,看看他们包含的文档[1]:
authkey
authkey is the authorization key for private sheet support.
问:我该如何使用authkey?有人能给我举个例子让我试试吗
提前感谢!
[1]https://github.com/jsoma/tabletop[2]https://github.com/jsoma/tabletop/pull/64
这个答案怎么样?
问题和解决方法:
在";tabletop.js";,从请求的端点(https://spreadsheets.google.com/feeds/list/###/###/private/values?alt=json
)看来;tabletop.js";使用活页API v3。当使用authkey
时,oauth_token=authkey
被添加到查询参数中。在这种情况下,不幸的是,似乎无法使用它访问私人电子表格。从这种情况来看,不幸的,我认为在当前阶段,"tabletop.js";可能无法使用私人电子表格。但我不确定这是否会在未来的更新中得到解决。当然,似乎可以使用这个库访问网络发布的电子表格。
因此,在这个答案中,我想提出一种变通方法,将Spreadsheet中的值作为JSON对象进行检索。
模式1:
在这种模式中,使用谷歌应用程序脚本。使用谷歌应用程序脚本,可以轻松访问私人电子表格。
示例脚本:
使用此脚本时,请将其复制并粘贴到脚本编辑器中,然后运行函数myFunction
。
function myFunction() {
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
const values = sheet.getDataRange().getValues();
const header = values.shift();
const object = values.map(r => r.reduce((o, c, j) => Object.assign(o, {[header[j]]: c}), {}));
console.log(object) // Here, you can see the JSON object from Spreadsheet.
}
- 我认为这可能是一个简单的方法
模式2:
在此模式中,使用由Google应用程序脚本创建的Web应用程序。使用Web应用程序时,可以轻松访问专用电子表格。因为Web应用程序是用谷歌应用程序脚本创建的。在这种情况下,您可以通过登录Google帐户从外部访问Web应用程序。并且,JSON对象可以在HTML和Javascript中检索。
用法:
请按照以下流程操作。
1.创建谷歌应用程序脚本的新项目
Web应用程序的示例脚本是Google应用程序脚本。所以请创建一个谷歌应用程序脚本项目。为了使用文档服务,在本例中,使用Web应用程序作为包装器。
如果您想直接创建它,请访问https://script.new/.在这种情况下,如果您没有登录谷歌,则会打开登录屏幕。所以请登录谷歌。这样,谷歌应用程序脚本的脚本编辑器就打开了。
2.准备脚本
请将以下脚本(谷歌应用程序脚本)复制并粘贴到脚本编辑器中。此脚本适用于Web应用程序。
谷歌应用程序脚本端:Code.gs
function doGet() {
return HtmlService.createHtmlOutputFromFile("index");
}
function getObjectFromSpreadsheet(spreadsheetId, sheetName) {
const sheet = SpreadsheetApp.openById(spreadsheetId).getSheetByName(sheetName);
const values = sheet.getDataRange().getValues();
const header = values.shift();
const object = values.map(r => r.reduce((o, c, j) => Object.assign(o, {[header[j]]: c}), {}));
return object;
}
HTML&Javascript端:index.html
<script>
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
google.script.run.withSuccessHandler(sample).getObjectFromSpreadsheet(spreadsheetId, sheetName);
function sample(object) {
console.log(object);
}
</script>
spreadsheetId
和sheetName
是从Javascript端提供给Google Apps Script端的。从这种情况来看,在这种情况下,getObjectFromSpreadsheet
可以代替";tabletop.js">
3.部署Web应用程序
- 在脚本编辑器上,通过"发布"->"部署为web应用程序">
- 选择"我">表示"strong>";将应用程序执行为:"。
- 这样,脚本将作为所有者运行
- 选择"只有我自己">表示"strong>";谁可以访问该应用程序:"。
- 在这种情况下,为了访问Web应用程序,需要登录谷歌帐户。从你的情况来看,我认为这可能有用
- 单击";部署";按钮为新";项目版本">
- 自动打开对话框";需要授权";。
- 点击";查看权限">
- 选择自己的帐户
- 单击";高级";在";此应用程序未经过验证
- 单击";转到###项目名称###(不安全)">
- 单击";允许";按钮
- 单击";OK">
- 复制Web应用程序的URL。就像
https://script.google.com/macros/s/###/exec
。- 当您修改谷歌应用程序脚本时,请重新部署为新版本。这样,修改后的脚本就会反映到Web应用程序中。请小心
4.使用Web应用程序运行该功能
您可以按如下方式测试上述脚本。
- 登录Google帐户
- 使用浏览器访问
https://script.google.com/macros/s/###/exec
等Web应用程序的URL
通过此操作,您可以在控制台上看到检索到的JSON对象。
注:
- 当您修改Web应用程序的脚本时,请将Web应用程序重新部署为新版本。这样,最新的脚本就会反映到Web应用程序中。请小心
参考文献:
- Web应用程序
- 使用Google应用程序脚本利用Web应用程序